我很困惑为什么这会抛出错误warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’
int x = 5;
int **y = &x;
printf("%d", y);
在这行得通吗?
int x = 5;
int *y = &x;
printf("%d", *y);
发布于 2014-12-12 23:07:52
因为您在第二个版本中将y
声明为指向整数的指针,所以编译器会有一种温暖而模糊的感觉,认为*y
是一个有效的整数。
在第一个版本中,y
被声明为一个指向整数指针的指针(无论如何,我总是这样想它),所以*y
应该解析为一个整数指针,而不是整数--编译器警告您,它可能与printf
中的%d
不对齐。
感谢@KierBorromeo在我身上发现了一个愚蠢的错误。
发布于 2014-12-12 23:08:31
我认为第一个版本的问题是:y
的类型是指向指向整数的指针的指针,而&x
是一个地址,可以看作是,一个指向整数的指针。很明显存在着不匹配的现象。
在第二个版本中,y
的类型是--指向整数的指针,因此程序编译时没有警告。
发布于 2014-12-12 23:20:18
错误是不言自明的。您正在传递一个int*
,其中期望有一个int
。
int x = 5;
int *y = &x;
printf("%d", y); // <-- y is an int* - ERROR
int x = 5;
int *y = &x;
printf("%d", *y); // <-- y is an int*, so *y is an int - OK
https://stackoverflow.com/questions/27453461
复制相似问题