c - 数组名是C语言中的指针吗?

标签 c arrays pointers

<分区>

我知道C语言中的指针是一个保存地址的变量。 例如:

int myVar;
int *p;
p = &myVar;
printf("%p\n", p);
printf("%p\n", &p);

输出将是两个不同的地址,第一个是 myVar 的地址,第二个是指针本身的地址,这意味着指针也是一个变量,并且在内存中有一个地址(如果我纠正我'我错了)

但我的问题是关于数组的,例如我们有这样的代码:

int myArray[10];

所以在这里我认为 myArray 也是一个指针,它保存 myArray 的起点地址,在本例中是 myArray[0],所以当我打印 myArray[0] 和 myArray 的地址时,我得到相同的结果:

printf("%p\n", &myArray[0]);
printf("%p\n", myArray);

现在,当我尝试打印 myArray 本身的地址时,让我感到困惑的部分就在这里:

printf("%p\n", &myArray);

在这里,我得到了与我期望获得另一个地址(如指针)相同的结果。myArray 是一个 标签之类的?

最佳答案

&myArray[0]是数组首元素的地址,&myArray是数组的地址。它们必须具有相同的地址,但类型不同。

myArray 不是指针。它是一个数组,在某些情况下衰减int* 类型的指针。作为printf的参数就是这样一个例子。

关于c - 数组名是C语言中的指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57996016/

相关文章:

使用 pin、perf 和 valgrind 计算二进制文件执行的指令数

php - 如何使用 Codeigniter 获取数组值

php - 如何将插入数组值存储为单独的记录

javascript - 删除另一个数组中数组中的第一个元素

c++ - 是什么让 char * 成为一个字符数组?

c++ - 来自 TrackBar 的 WM_VSCROLL/WM_HSCROLL 消息不会发送到子类 MessageHandler。为什么?

c++ - while 条件下的预处理器指令不起作用

C 不会编译包含 sdl.h

c - 指向结构的指针

c++ - 为什么使用指针的 STL 算法比使用 std::vector 迭代器快得多?