1. 程式人生 > >陣列名和陣列名加地址符的區別(瞭解指標)

陣列名和陣列名加地址符的區別(瞭解指標)

問題發現在int *p[4]和int (*ip)[4]的區別? 為了明白這個區分,做個小例子驗證 以下是驗證程式碼         int *p[4]; int a=0; int *q=NULL; p[0]= &a; p[1]=q; int (*ip)[4]; int arr[4]={1,2,3,4}; ip=&arr;//  當我(ip = arr;)不用地址符號的時候是編譯不過的 int brr[4]={11,22,33,44}; ip = &brr;//  當我(ip = brr;)不用地址符號的時候是編譯不過的 為什麼編譯不過呢? 陣列名是指標,指向陣列中第一個元素的。 陣列名加地址符的時候就指向整個陣列的地址。 為了驗證這個問題的正確性,以下是例子: 可以看出結論是正確的,a和&a的區別就是指向的地址陣列的地址和陣列首個元素的地址一樣,但型別不一樣,&a是指向陣列的地址,加一就相當於加了整個陣列的長度。而a+1就相當於加了一個元素的值。 int a[2] = {1,2}; printf("a=%p\n",a); printf("&a=%p\n",&a); printf("a+1 = %p\n",a + 1); printf("&a+1 = %p\n",&a + 1); 執行結果如下: int a[4] = {1,2,4,7}; printf("a=%p\n",a); printf("&a=%p\n",&a); printf("a+1 = %p\n",a + 1); printf("&a+1 = %p\n",&a + 1); 執行結果如下: