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

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎一次元配列の場合: {{See also|C言語/ポインタ#コラム:intにアドレス値を代入してはいけない!}}
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
52 行
このように、ポインタ型やアドレスに対する加算は、通常の加算とは意味が異なります。
 
;[https://paiza.io/projects/tkaTaxajFScWrdgyPa--aQ?language=python3 コード例]:<syntaxhighlight lang="C">
;コード例
<syntaxhighlight lang="C">
#include <stdio.h>
 
64 ⟶ 63行目:
 
int *pa = a; /* 配列名(この場合は「a」)は配列の先頭要素(int)のアドレスを示す。
&a は配列のアドレスを表すのでその場合は、int (*)[5] が型となる。*/
 
printf("%d ", *(pa + 2)); //ポインターpaを使って配列aの要素を表示する。
printf("\n");
 
 
printf("アドレスpaは %p \n", pa);
87 ⟶ 85行目:
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
2 3 5 7
5
アドレスpaは 000000000022FE200x7ffccc95ac30
アドレス&a[0]は 000000000022FE200x7ffccc95ac30
アドレス&a[1]は 000000000022FE240x7ffccc95ac34
アドレス&a[1]は 000000000022FE280x7ffccc95ac38
 
アドレスpaは 000000000022FE200x7ffccc95ac30
実行結果
アドレスpa+1は 000000000022FE240x7ffccc95ac34
<pre>
アドレスpa+2は 000000000022FE280x7ffccc95ac38
2 3 5 7
(&a[0]) +1の場合でも 000000000022FE240x7ffccc95ac34
%pでなく%xの場合でも 22fe24cc95ac34
アドレスpaは 000000000022FE20
アドレス&a[0]は 000000000022FE20
アドレス&a[1]は 000000000022FE24
アドレス&a[1]は 000000000022FE28
 
アドレスpaは 000000000022FE20
アドレスpa+1は 000000000022FE24
アドレスpa+2は 000000000022FE28
(&a[0]) +1の場合でも 000000000022FE24
%pでなく%xの場合でも 22fe24
 
どうしても整数計算的に+1したいなら
int h = &a[0];によって 22fe21cc95ac31
</syntaxhighlight lang="C">
</pre>
{{See also|C言語/ポインタ#コラム:intにアドレス値を代入してはいけない!}}