我认为数组和指针基本上是同一个东西,直到我运行这个程序:
int main() {
int* a = new int(19);
int b[1];
b[0] = 19;
printf("*a: %d\n a: %p\n &a:%p\n", *a, a, &a);
printf("*b: %d\n b: %p\n &b:%p\n", *b, b, &b);
delete a;
}
输出是:
*a: 19
a: 0x7f94524000e0
&a:0x7fff51b71ab8
*b: 19
b: 0x7fff51b71ab4
&b:0x7fff51b71ab4
谁能解释一下为什么 &b 的输出与 b 相同?
谢谢! -埃尔本
最佳答案
嗯,b
是一个数组。在最轻微的借口下,它会衰减为指向 b
的第一个元素的指针。但是请注意,表达式 b
和 &b
是不等价的:b
衰减为第一个元素的指针,即它是 int*
类型,而 &b
是指向数组的指针,即它是 int(*)[1]
.
关于c++ - c/c++ 指向数组的指针与指向指针的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19746173/