私はこれらの二つの文があります。これら2つのステートメントの違いは何ですか?
printf("%u",a+1);
と
printf("%u",(int *)a+1);
私はこの混乱に出くわしたとき、実は私はこのコードに取り組んでいたが。上記のプログラムの出力を理解するために
#include<stdio.h>
int main()
{
int a[2][2]={1,2,3,4};
int i,j;
int *p[] = { (int*)a, (int*)a+1, (int*)a+2 };
for(i=0; i<2; i++){
for(j=0; j<2; j++){
printf("%d %d %d %d",* (*(p+i)+j), *(*(j+p)+i), *(*(i+p)+j), *(*(p+j)+i));
}
}
return 0;
}
Output:
1 1 1 1
2 2 2 2
2 2 2 2
3 3 3 3
私はこの出力を作っているの違いは、私は上記の二つの文の違いを知っていれば解決することができることを知っているようになりました。
私の現在の理解: (a+1)
は、私に配列の2番目の要素のアドレスを与えます。この場合、2-dアレイは、それぞれが2つの要素を有する2 -dアレイとして視覚化することができる。だから(a+1)
は私にa[1][0]
のアドレスを与えますが、なぜ(int *)a+1
に私にa[0][1]
のアドレスを与えていますか?
プログラムの違いと出力を説明してください。
ありがとうございました。
あなたのコードに 'printf("%u "、a + 1)'のようなものはありません。 –