【发布时间】:2017-02-06 20:52:19
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
int foo(int **asciiSum);
int main(void)
{
int asciiSum;
asciiSum = 0;
int* pointToAsciiSum;
*pointToAsciiSum = &asciiSum;
printf("%d\n",*pointToAsciiSum); //prints 0
foo(pointToAsciiSum)
printf("%d\n",*pointToAsciiSum); //prints 2
return 0;
}
int foo(int** asciiSum)
{
*asciiSum = 2;
return 0;
}
如何消除警告?
警告:
警告 C4047: 'function' : 'int **' 在间接级别上与 'int *' 不同 //在调用 foo 时发生
警告 C4024: 'foo' : 形参和实参 1 的不同类型 // 调用 foo 时发生
警告 C4047: '=' : 'int *' 在间接级别上与 'int' 不同 //发生在 foo 中,当将 2 分配给 *asciiSum 时
【问题讨论】:
-
在不确定时使用具有自动存储持续时间的对象的值的未定义行为。
-
@EOF 你的解释不适用。
-
@BLUEPIXY 见鬼:
int* pointToAsciiSum; *pointToAsciiSum = &asciiSum;在不确定时使用指针(这是一个具有自动存储持续时间的对象)。想想如果是的话,也是违反了约束,这就引出了对应的编译器警告在哪里的问题。 -
*pointToAsciiSum = &asciiSum;-->pointToAsciiSum = &asciiSum;,foo(pointToAsciiSum)-->foo(&pointToAsciiSum);,*asciiSum = 2;-->**asciiSum = 2;
标签: c pointers warnings pass-by-reference