Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 無名構造体と共用体 | 高度な構造体の活用
C構造体
セクション 4.  3
single

single

無名構造体と共用体

メニューを表示するにはスワイプしてください

Cプログラミング言語には、無名構造体および無名共用体があり、名前を指定せずに構造体や共用体を定義することが可能。

無名構造体と無名共用体とは?

無名共用体や無名構造体は識別子を持たないため、その型の独立した変数を作成することはできない。通常、他の構造体の内部で使用される。

// Anonymous union
union {
    char x;
    int y;
};

// Anonymous structure
struct {
    char x;
    int y;
};

無名構造体および無名共用体は、特にネストされていて宣言された場所でのみ使用される場合に有用。

実用例

同じ値を数値コードまたは文字記号として解釈できるASCIIテーブルを表現したい場合を考慮。構造体内に無名共用体を使用することで、これら2つの解釈を効率的に切り替えることが可能。

main.c

main.c

123456789101112131415161718192021
#include <stdio.h> struct ASCIItable { // Anonymous union allows dual representation of the same memory union { char symbol; int num; }; }; int main() { struct ASCIItable AZtable; AZtable.num = 65; // ASCII code for 'A' // Print all uppercase letters and their numeric codes for (int i = 0; i < 26; i++) { printf("num = %d | symbol = `%c`\n", AZtable.num + i, AZtable.symbol + i); } return 0; }

この例では、構造体 ASCIItable に匿名共用体(union)が含まれています。共用体を使うことで、同じメモリ領域を数値値(num)または文字(symbol)として解釈できます。

AZtable.num に 65 を設定すると、これは 'A' の ASCII コードに対応します。同じメモリ領域を使って、AZtable.symbol'A' を表します。26 回繰り返すことで、すべての大文字アルファベットとその ASCII コードを出力でき、同じメモリ領域がデータの複数の見方を表現できることを示しています。

タスク

スワイプしてコーディングを開始

2次元平面上で原点 (0,0) から最も遠い点を見つける関数 findFurthestPoint の作成。各点は、フィールド Pointx を持つ無名の入れ子構造体を含む構造体 y で表現されます。

この関数は、次の式を用いて各点のユークリッド距離を計算します:

distance = sqrt(x*x + y*y)

そして、最大距離を持つ点のインデックスを返します。

  1. 関数内で、最初の点の原点からの距離を式を使って計算。
  2. maxIndex0 で初期化。
  3. for ループを用いて、i = 1 から i = n まで点を反復処理。
  4. 各点について、上記の式で距離を計算。
  5. 距離が maxDistance より大きい場合、maxDistancemaxIndex を現在の点の距離とインデックスで更新。
  6. ループ終了後、最も遠い点のインデックスとして maxIndex を返却。

解答

Switch to desktop実践的な練習のためにデスクトップに切り替える下記のオプションのいずれかを利用して、現在の場所から続行する
すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 4.  3
single

single

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

some-alt