int a[10];
a ,&a和&a[0]三個值是相等的。
a叫做陣列名,是陣列首元素的地址,也就是&a[0]的值。
&a是一個數組指標。是陣列的地址。
切記:&a不是指向指標的指標,因為&a和a的值相等,但是*&a和*a的值不相等。*&a和a的值一樣,說明*&a僅僅是對這個陣列指標進行了取值,取得的是陣列的值,即陣列首元素的地址,而不是對&a這個地址進行了取值。這個是c語言中針對陣列指標運算的規定。 這裡的陣列指標&a取值之後,變成了a,是a,不是*a,變成了這個陣列的陣列名,或者說是陣列首元素的地址。
驗證程式碼如下:
#include<stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
printf("a=%x\n",a);
printf("&a=%x\n",&a);
printf("*(int*)&a=%x\n",(*((int *)(&a))));
printf("*&a=%x\n",(*(*(&a))));
printf("&a[0]=%x\n",&a[0]);
printf("*&a[0]=%x\n",*(&a[0]));
return 0;
}
int a[10];
a ,&a和&a[0]三個值是相等的。
a叫做陣列名,是陣列首元素的地址,也就是&a[0]的值。
&a是一個數組指標。是陣列的地址。
切記:&a不是指向指標的指標,因為&a和a的值相等,但是*&a和*a的值不相等。*&a和a的值一樣,說明*&a僅僅是對這個陣列指標進行了取值,取得的是陣列的值,即陣列首元素的地址,而不是對&a這個地址進行了取值。這個是c語言中針對陣列指標運算的規定。 這裡的陣列指標&a取值之後,變成了a,是a,不是*a,變成了這個陣列的陣列名,或者說是陣列首元素的地址。
驗證程式碼如下:
#include<stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
printf("a=%x\n",a);
printf("&a=%x\n",&a);
printf("*(int*)&a=%x\n",(*((int *)(&a))));
printf("*&a=%x\n",(*(*(&a))));
printf("&a[0]=%x\n",&a[0]);
printf("*&a[0]=%x\n",*(&a[0]));
return 0;
}