配列とポインタ変数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;
}