gpt4 book ai didi

c - ` int a = 2; int b = a;` 报告意外错误

转载 作者:行者123 更新时间:2023-11-30 18:27:46 25 4
gpt4 key购买 nike

假设这样一个最少的代码片段:

#include <stdio.h>
int main(void)
{
int a = 2;
int b = a;
printf("a = %d, &a = %d", a, &a);
printf("b = %d, &b = %d", b, &b);

return 0;
}

我运行它并得到错误报告:

test.c:6:31: warning: format specifies type 'int' but the argument has type 'int *' [-Wformat]
printf("a = %d, &a = %d", a, &a);
~~ ^~
test.c:7:31: warning: format specifies type 'int' but the argument has type 'int *' [-Wformat]
printf("b = %d, &b = %d", b, &b);
~~ ^~
2 warnings generated.

我假设a = 2 b = 2相当于 a = b = 2 ,但编译者提示信息难以理解。

最佳答案

您正在尝试使用 %d 格式说明符打印指针,该格式说明符用于打印 int。这就是您收到警告的原因。

要打印指针,请使用 %p 格式说明符:

printf("a = %d, &a = %p", a, (void*)&a);
printf("b = %d, &b = %p", b, (void*)&b);

此外,请务必将指针强制转换为 void *。这样做的原因是因为并非所有指针类型都必须具有相同的表示形式,并且可变参数函数无法正确执行转换,因为它不知道实际类型是什么。因此需要显式转换为 void *

关于c - ` int a = 2; int b = a;` 报告意外错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52876740/

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