指向整型数组的指针和指向整型数组的指针的语法区别



让我们考虑以下代码:

int y = 20;
int *pointer_of_y = y; //Intentionally missed &
printf("%pn",pointer_of_y);
printf("%pn",&y);
printf("%dn",*pointer_of_y);
输出:

0x14 //Value of 20 in hex
0x7fff56747af8 //Address of Y Variable
Segmentation fault: 11 //Value at pointer: Due to missing &

上面的代码没有执行,因为我漏掉了&

让我们考虑将其初始化为数组的相同代码。

int x[]= {10,20,30,40};
int *pointer_of_x = x;
printf("%pn",pointer_of_x);
printf("%pn",&x);
printf("%dn",*pointer_of_x);

输出:

0x7fff5b5eaad0  //Pointer value
0x7fff5b5eaad0  //Address of x
10 //Value at address pointed

第二个例子是如何工作的,即使我错过了&在指针初始化中。为什么作为一个数组会有所不同?

当数组名用于表达式上下文中,而不是作为sizeof&的操作数时,它的第一个元素衰变成pointer

所以这里-

int x[]= {10,20,30,40};

x将给出数组第一个元素的地址,类型为int *。因此这是有效的-

int *pointer_of_x = x;   //works 

如果将类型为T的数组赋值给类型为T*的指针,则该数组衰减为其1st元素的地址。

最新更新