「C言語/配列とポインタ」の版間の差分

削除された内容 追加された内容
→‎1次元配列を指すポインター: 追記した冒頭のコードをより平易なものに変更。冒頭コードのみ。
構造体配列のポインター
110 行
:{{code|sizeof *a / sizeof **a}}は、単に {{code|4}} と書いてしまいがちですが、変更があったときに修正漏れがちで発見が困難なバグのもととなりえるので、隣り合った次元間のsizeof数の商で求めるべきです。
:{{code|*p}}を、{{code|( )}}で括らないとポインターの配列になってしまうので、{{code|( )}} は必須です。
 
== 構造体配列のポインター ==
構造体を要素とする一次元配列に関するポインターも、原理的には一次元配列に対するポインターと同様の手法で参照可能です。
通称「構造体配列」とは何かについては『[[C言語/構造体#構造体の配列]]』を参照してください。 
 
;コード例
<syntaxhighlight lang=c>
#include <stdio.h>
 
typedef struct {
char* name;
int price;
} product_entry;
 
int main(void) {
// const があるとなぜか後工程でエラーになるのでconst除去。MinGW 確認
product_entry products[] = {{"牛乳", 200},
{"オレンジジュース", 150},
{"トマトジュース", 180},
{"りんごジュース", 220}};
 
for (size_t i = 0; i < sizeof(products) / sizeof(products[0]); i++) {
printf("商品名: %s, 価格: %d円\n", products[i].name, products[i].price);
}
 
// ここまで『C言語/構造体#構造体の配列』の内容。
// 以下、本ページ独自の内容。
 
product_entry *pa = products;
printf("%s ", (*(pa + 2)).name ); //ポインターpaを使って配列aの要素を表示する。
printf("\n");
 
}
</syntaxhighlight>
 
実行結果
<pre>
商品名: 牛乳, 価格: 200円
商品名: オレンジジュース, 価格: 150円
商品名: トマトジュース, 価格: 180円
商品名: りんごジュース, 価格: 220円
トマトジュース
</pre>
 
{{Nav}}
117 ⟶ 160行目:
 
== 参考文献 ==
* 前橋和弥著『C言語 ポインター完全制覇』平成13年6月25日初版第4刷発行
 
[[Category:C言語|はいれつとほいんた]]