標籤:等價 編程 tracking 含義 ptr and data print include
#include<stdio.h>void print_array_test(char ca[]){ printf("ca : %s\n",ca); printf("&ca : %s\n",&ca); printf("&(ca[0]) : %s\n",&(ca[0])); printf("&(ca[1]) : %s\n",&(ca[1])); printf("*(ca+0) : %c\n",*(ca+0)); printf("*(ca+1) : %c\n",*(ca+1)); printf("ca+1 : %s\n",ca+1);}void print_ptr_test(char *pa){ printf("pa : %s\n",pa); printf("&pa : %s\n",&pa); printf("&(pa[0]) : %s\n",&(pa[0])); printf("&(pa[1]) : %s\n",&(pa[1])); printf("pa+1 : %s\n",pa+1); printf("pa[1] : %c\n",pa[1]); printf("*(pa+1) : %c\n",*(pa+1)); printf("++pa : %s\n",++pa);}int main(){ char abc[]="hello,world!"; print_array_test(abc); print_ptr_test(abc); return 0;}
數組abc[20]="hello,world!"
中&abc[i]與abc+i含義同樣——取的是abc[i]的地址
指標pa =abc;
pa[i]與*(pa+i)是等價的——取的是abc[i]的值
鑒於以上程式,執行之:
[[email protected] code]# ./arrayandptr
ca : hello,world!
&ca : ???,??;
&(ca[0]) : hello,world!
&(ca[1]) : ello,world!
*(ca+0) : h
*(ca+1) : e
ca+1 : ello,world!
pa : hello,world!
&pa : ???,??;
&(pa[0]) : hello,world!
&(pa[1]) : ello,world!
pa+1 : ello,world!
pa[1] : e
*(pa+1) : e
++pa : ello,world!
[[email protected] code]#
C專家編程之為什麼C語言把數組形參當做指標:數組/指標實參