gpt4 book ai didi

c - 数组指针和操作

转载 作者:行者123 更新时间:2023-11-30 16:00:15 25 4
gpt4 key购买 nike

假设我有:

int (* arrPtr)[10] = NULL; // A pointer to an array of ten elements with type int.
int (*ptr)[3]= NULL;
int var[10] = {1,2,3,4,5,6,7,8,9,10};
int matrix[3][10];

现在如果我这样做了,

arrPtr = matrix;     //.....This is fine...

现在我可以这样做吗:

ptr =  var;          //.....***This is working***

或者是否必须这样做:

ptr= (int (*)[10])var;         //....I dont understand why this is necessary

另外,

printf("%d",(*ptr)[4]);

即使我们声明,它仍然有效

int (*ptr)[3]=NULL;
^^^

最佳答案

在某些情况下,数组的名称是指向其第一个位置的指针。所以,当你这样做时,

ptr = var;

您正在分配地址 var[0]ptr[0] int var[10]声明使得var作为 int 指针由于都是int指针,所以运算有效。

对于第二个问题,当你声明一个指针时,它指向某个地址。说

int * ptr = 0x1234; //Some Random address

现在当你写 ptr[3] 时,它是 0x1234 + (sizeof(int) * 3) 。因此,无论声明的数组大小如何,指针都会起作用。

所以当 ptr = NULL 时,*ptr[4] 将指向NULL + (sizeof(int) * 4)即有效的操作!

关于c - 数组指针和操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7963579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com