配列とポインタ変数2
>> i[p]でも動く(足し算は順序を変えても可・・・*(p+i)=*(i+p))ので、ただの省略表現で配列とは言えないということらしい。
と言うのが配列≠ポインタ派の拠って立つところなんだね。ママン
C言語だとそもそも配列の添字を抜いた物がポインタなんだょ。。。。
だからどっちでも同じ事が出来ます
そしてポインタへの加算と添字は同じ処理が行われます。
ハイハイ実装
#include <stdio.h> int main(int argc,char **argv) { int *int_p,i=5; char *char_p,ii=5; int int_a[5]; char char_a[5]; int_p = malloc(5 * sizeof(int)); char_p = malloc(5 * sizeof(char)); printf("char_p =%p \n",char_p); printf("char_p +ii =%p \n",char_p+ii); printf("char_p +ii =%p \n",ii+char_p); printf("char_p + i =%p \n",char_p+ i); printf("char_p + i =%p \n",i +char_p); printf("char_p[i] =%p \n",&char_p[i]); printf("i[char_p] =%p \n",&i[char_p]); printf("char_p[ii] =%p \n",&char_p[ii]); printf("ii[char_p] =%p \n",&ii[char_p]); puts("\n"); printf("int_p =%p \n",int_p); printf("int_p +ii =%p \n",int_p+ii); printf("int_p +ii =%p \n",ii+int_p); printf("int_p + i =%p \n",int_p+ i); printf("int_p + i =%p \n",i +int_p); printf("int_p[i] =%p \n",&int_p[i]); printf("i[int_p] =%p \n",&i[int_p]); printf("int_p[ii] =%p \n",&int_p[ii]); printf("ii[int_p] =%p \n",&ii[int_p]); puts("\n"); printf("int_p =%p \n",int_p); printf("int_p[ii] =%p \n",((char *)int_p + ii)); printf("ii[int_p] =%p \n",(ii + ((char *)int_p))); printf("int_p[ii] =%p \n",&(((char *)int_p)[ii])); printf("ii[int_p] =%p \n",&(ii[((char *)int_p)])); puts("\n"); printf("char_a =%p \n",char_a); printf("char_p[ii] =%p \n",(((int *)char_p)+ ii)); printf("ii[char_p] =%p \n",(ii + ((int *)char_p))); printf("char_p[ii] =%p \n",&(((int *)char_p)[ii])); printf("ii[char_p] =%p \n",&(ii[((int *)char_p)])); puts("\n"); printf("char_a =%p \n",char_a); printf("char_a +ii =%p \n",char_a+ii); printf("char_a +ii =%p \n",ii+char_a); printf("char_a + i =%p \n",char_a+ i); printf("char_a + i =%p \n",i +char_a); printf("char_a[i] =%p \n",&char_a[i]); printf("i[char_a] =%p \n",&i[char_a]); printf("char_a[ii] =%p \n",&char_a[ii]); printf("ii[char_a] =%p \n",&ii[char_a]); puts("\n"); printf("int_a =%p \n",int_a); printf("int_a +ii =%p \n",int_a+ii); printf("int_a +ii =%p \n",ii+int_a); printf("int_a + i =%p \n",int_a+ i); printf("int_a + i =%p \n",i +int_a); printf("int_a[i] =%p \n",&int_a[i]); printf("i[int_a] =%p \n",&i[int_a]); printf("int_a[ii] =%p \n",&int_a[ii]); printf("ii[int_a] =%p \n",&ii[int_a]); puts("\n"); printf("int_a =%p \n",((char *)int_a )); printf("int_a[ii] =%p \n",((char *)int_a + ii)); printf("ii[int_a] =%p \n",(ii + ((char *)int_a))); printf("int_a[ii] =%p \n",&(((char *)int_a)[ii])); printf("ii[int_a] =%p \n",&(ii[((char *)int_a)])); puts("\n"); printf("char_a =%p \n",(((int *)char_a))); printf("char_a[ii] =%p \n",(((int *)char_a)+ ii)); printf("ii[char_a] =%p \n",(ii + ((int *)char_a))); printf("char_a[ii] =%p \n",&(((int *)char_a)[ii])); printf("ii[char_a] =%p \n",&(ii[((int *)char_a)])); free(char_p); free(int_p); return 0; }