C言語についての質問です。 0≦i≦14に対して、ptr+iと&array[i]が等しくなることを標準出力で確かめたいのですが分かりません。 int main (void) {

C言語関連 | プログラミング53閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

0

その他の回答(2件)

0

#include <stdio.h> //Compiler version gcc 6.3.0 #define N 15 int main() { int array[N]; int *ptr; for (int i = 0;i < N;i++) { array[i] = i; } ptr=array; for (int i = 0;i < N;i++,ptr++) { printf("ptr = %p,*ptr = %d\n",ptr,*ptr); printf("&array[%2d] = %p,array[%2d] = %d\n\n",i,&array[i],i,array[i]); } return 0; } ---------- ptr = 0x7ffdbe0c1670,*ptr = 0 &array[ 0] = 0x7ffdbe0c1670,array[ 0] = 0 ptr = 0x7ffdbe0c1674,*ptr = 1 &array[ 1] = 0x7ffdbe0c1674,array[ 1] = 1 ptr = 0x7ffdbe0c1678,*ptr = 2 &array[ 2] = 0x7ffdbe0c1678,array[ 2] = 2 ptr = 0x7ffdbe0c167c,*ptr = 3 &array[ 3] = 0x7ffdbe0c167c,array[ 3] = 3 ptr = 0x7ffdbe0c1680,*ptr = 4 &array[ 4] = 0x7ffdbe0c1680,array[ 4] = 4 ptr = 0x7ffdbe0c1684,*ptr = 5 &array[ 5] = 0x7ffdbe0c1684,array[ 5] = 5 ptr = 0x7ffdbe0c1688,*ptr = 6 &array[ 6] = 0x7ffdbe0c1688,array[ 6] = 6 ptr = 0x7ffdbe0c168c,*ptr = 7 &array[ 7] = 0x7ffdbe0c168c,array[ 7] = 7 ptr = 0x7ffdbe0c1690,*ptr = 8 &array[ 8] = 0x7ffdbe0c1690,array[ 8] = 8 ptr = 0x7ffdbe0c1694,*ptr = 9 &array[ 9] = 0x7ffdbe0c1694,array[ 9] = 9 ptr = 0x7ffdbe0c1698,*ptr = 10 &array[10] = 0x7ffdbe0c1698,array[10] = 10 ptr = 0x7ffdbe0c169c,*ptr = 11 &array[11] = 0x7ffdbe0c169c,array[11] = 11 ptr = 0x7ffdbe0c16a0,*ptr = 12 &array[12] = 0x7ffdbe0c16a0,array[12] = 12 ptr = 0x7ffdbe0c16a4,*ptr = 13 &array[13] = 0x7ffdbe0c16a4,array[13] = 13 ptr = 0x7ffdbe0c16a8,*ptr = 14 &array[14] = 0x7ffdbe0c16a8,array[14] = 14 Process finished.

0

ポインタが保持している、アドレスを出してみれば良いですね。 intptr_t などのアドレスを整数として格納できる型にするか、ポインタの中身をアドレスで出力できる printf の機能の %p を使うか、のどちらかで確かめれそうです。 %p でやってみるとすると、 for (i=0;i<=14;++i ){     printf("%p, %p\n", (void*)(ptr+i), (void*)(&array[i])); } という感じですね。