c char配列とポインタ

#include
int main(){

char a[6],*p;

a[0]='a';
a[1]='b';
a[2]='c';
a[3]='4';
a[4]='e';
a[5]='p';
a[6]='f';
a[7]='e';
printf("%sn",a);
printf("printing address of each array element");
p=a;

printf("%un",&p[0]);
printf("%un",p+1);
printf("%un",a+2);
return 0;
}

出力は次のとおりです…

[email protected]:~/Desktop/prep$ ./a.out
abc4epfe
printing address of each array element3216565606
3216565607
3216565608

配列を char a [6] として宣言すると、 a [7]
に値を割り当てることができます。最後の要素にヌル文字を追加する必要はありませんか?

Also p=a => p holds the address of first element of char
array a. I don’t understand how it is correct to place an ‘&’
in front of an address (p[0]). &p[0]
means address of address of first element of a which
doesn’t make any sense, at least to me.

正しい出力が印刷されるのはなぜですか?

ベストアンサー

定義されていない動作が呼び出されました。配列の境界を越えて書くことについての推論には、少しのポイントがあります。ただしないでください。

&p[0] means address of address of first element
of a[] which is not sensible

No, that’s perfectly sensible. Your description perfectly
describes what is going on. &p[0] is the same as
p which is the same as a. When you write
p[0] you are dereferencing the pointer. When you then
write &p[0] you are taking the address of that
variable and thus return to what you started from,
p.

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です