gpt4 book ai didi

c - 使用带有数组的 `addres of` 运算符作为指针的初始值设定项时收到警告

转载 作者:行者123 更新时间:2023-11-30 18:55:08 26 4
gpt4 key购买 nike

我正在学习 C,经过大量研究(阅读 K&R 书(仍在阅读),阅读一些文章和一些关于 SO 的答案)并采取一些措施后,我在真正理解 C 中的数组和指针方面遇到了一些麻烦一路上有大量的笔记,我决定做一个小测试/程序来证明我的理解并消除一些疑虑,但我仍然对使用此代码时收到的警告感到困惑:

#include <stdio.h>

int main(int argc, char **argv) {
char a[3] = {1, 2, 3};
char *p = &a;

printf("%p\n", a); /* Memory address of the first element of the array */
printf("%p\n", &a); /* Memory address of the first element of the array */
printf("%d\n", *a); /* 1 */
}

使用 GNU GCC v4.8.3 编译输出:

warning: initialization from incompatible pointer type                                                                                   
char *p = &a;
^
0x7fffe526d090
0x7fffe526d090
1

使用 VC++ 编译输出:

warning C4047: 'initializing' : 'char *' differs in levels of indirection from 'char (*)[3]'

00000000002EFBE0
00000000002EFBE0
1

如果 &aa 应该具有相同的值,并且在仅使用 a 时编译时不会出现警告,为什么我会收到此警告p 的初始化器?

最佳答案

&a 是整个数组的内存地址。它与第一个元素的地址具有相同的值(因为整个数组从第一个元素开始),但它的类型是“指向数组的指针”而不是“指向元素的指针”。因此发出警告。

关于c - 使用带有数组的 `addres of` 运算符作为指针的初始值设定项时收到警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28635007/

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