single
無名構造体と共用体
メニューを表示するにはスワイプしてください
Cプログラミング言語には、無名構造体および無名共用体があり、名前を指定せずに構造体や共用体を定義することが可能。
無名構造体と無名共用体とは?
無名共用体や無名構造体は識別子を持たないため、その型の独立した変数を作成することはできない。通常、他の構造体の内部で使用される。
// Anonymous union
union {
char x;
int y;
};
// Anonymous structure
struct {
char x;
int y;
};
無名構造体および無名共用体は、特にネストされていて宣言された場所でのみ使用される場合に有用。
実用例
同じ値を数値コードまたは文字記号として解釈できるASCIIテーブルを表現したい場合を考慮。構造体内に無名共用体を使用することで、これら2つの解釈を効率的に切り替えることが可能。
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 の作成。各点は、フィールド Point と x を持つ無名の入れ子構造体を含む構造体 y で表現されます。
この関数は、次の式を用いて各点のユークリッド距離を計算します:
distance = sqrt(x*x + y*y)
そして、最大距離を持つ点のインデックスを返します。
- 関数内で、最初の点の原点からの距離を式を使って計算。
maxIndexを0で初期化。forループを用いて、i = 1からi = nまで点を反復処理。- 各点について、上記の式で距離を計算。
- 距離が
maxDistanceより大きい場合、maxDistanceとmaxIndexを現在の点の距離とインデックスで更新。 - ループ終了後、最も遠い点のインデックスとして
maxIndexを返却。
解答
フィードバックありがとうございます!
single
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください