gpt4 book ai didi

C、指针数组: int n[5], int *p[5],赋值p[i] = &n[i],为什么*p和p一样?

转载 作者:太空宇宙 更新时间:2023-11-04 00:46:43 24 4
gpt4 key购买 nike

抱歉,我误读了我的结果,*p 和 p 不同


我正在尝试理解指针数组。

我写了

int n[5] = {1,2,3,4,5};
int *p[5];
for(i = 0; i < 5; i++){
p[i] = &n[i];
}

到目前为止还不错。

我明白了

printf("%0x\n", *p);

给我数组中第一个指针的地址。


让我困扰的是p,只是p,没有星号,没有方括号。

因为

printf("%0x\n", *p);
printf("%0x\n", p);

[给我完全一样的东西。为什么 p 也是数组中第一个指针的地址??] 错误,抱歉!

当声明了一个像上面这样的指针数组时,p 到底是什么意思?


相关问题

int main(int argc, char *argv[]){
for(int i = 0; i < argc; i++){
printf("%s\n",argv[i]); //why not *argv[i]??
}
}

因为 argv 被声明为一个指针数组,argv[i] 不应该产生地址而不是它指向的字符串吗?因为它前面没有星号。

提前致谢。

最佳答案

p,只是p,没有星号,没有方括号给出了数组p[]的第一个元素的地址。 *p则给出数组p[]首元素的值,恰好是数组首元素的地址n[],根据你显示的代码。


让我们举个例子,假设一个整数大小为 4 字节,一个地址大小为 8 字节,以及您展示的第一个程序。

int n[5] = {1,2,3,4,5};
int *p[5];
for(i = 0; i < 5; i++)
{
p[i] = &n[i];
}

数组看起来像这样..(地址是出于解释目的而假定的,它们不是真实的)。

n[] = { 1,  2,  3,  4,  5};  //these are integers
// ^ ^ ^ ^ ^
// 100 104 108 112 116 these are the addresses of the elements of array n[]

p[] = { 100, 104, 108, 112, 116}; // these are pointer to integers
// ^ ^ ^ ^ ^
// 200 208 216 224 232 these are adddress of the elements of array p[]

现在,p,只有 p,没有星号,没有括号 将给出值 200,这是数组 p 的第一个元素的地址[]

同样 n 会给出值 100

*p 将给出值 100,这是存储在数组 p[] 的第一个位置的元素。

关于C、指针数组: int n[5], int *p[5],赋值p[i] = &n[i],为什么*p和p一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35473789/

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