#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 和实参 1 的类型不同//在调用 foo 时发生
警告 C4047: '=' : 'int *' 与 'int' 的间接级别不同//在将 2 分配给 *asciiSum 时出现在 foo 中
最佳答案
int* pointToAsciiSum;
*pointToAsciiSum = &asciiSum;
应该是
int* pointToAsciiSum;
pointToAsciiSum = &asciiSum;
您想要分配给指针,而不是分配给(未初始化的)指针指向的 int
。
int foo(int** asciiSum) {
*asciiSum = 2;
应该是
int foo(int* pointToAsciiSum) {
*pointToAsciiSum = 2;
让我们使用一致的名称。不过,主要问题是子进程需要一个指向指针的指针,但没有必要这样做。您想要更改 int
,因此您只需要一个指向该 int
的指针。
全部放在一起,没有所有额外的指针:
#include <stdio.h>
void foo(int* num_ptr) {
*num_ptr = 2;
}
int main(void) {
int num = 0;
printf("%d\n", num);
foo(&num);
printf("%d\n", num);
return 0;
}
关于c - c 中传递指针警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42077067/