「C言語/配列とポインタ」の版間の差分
削除された内容 追加された内容
→一次元配列の場合: {{See also|C言語/ポインタ#コラム:intにアドレス値を代入してはいけない!}} タグ: 2017年版ソースエディター |
→一次元配列の場合: paiza.io タグ: 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 ▼
▲2 3 5 7
▲5
▲アドレス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];によって
{{See also|C言語/ポインタ#コラム:intにアドレス値を代入してはいけない!}}
|