抱歉,我误读了我的结果,*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/