c++ - c/c++ 指向数组的指针与指向指针的指针

标签 c++ c arrays pointers

我认为数组和指针基本上是同一个东西,直到我运行这个程序:

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/

相关文章:

c++ - 按概率排序 if...else if 语句有什么影响?

c++ - 为什么会出现 "Multiple Definitions"错误

c - C程序仅在GCC中执行后才终止

objective-c - 为什么在我的 Objective-C 代码中间接调用时此 C 数组为 NULL? (cocos2d)

c - 将字符串拆分为标记并将标记放入数组 - strtok

c - C中的数组排序

c++ - 无法在 HEVC 解码器 IMFTransform 上设置输出类型

c++ - 取消声明函数中使用的结构成员?

c - SIGPIPE(OSX)和断开连接的套接字?

javascript - 将 javascript 对象转换为单个对象的数组