Initialization makes pointer from integer without a cast - C
对不起,如果这篇文章被认为是无知的,但我对 C 还是很陌生,所以我对它的理解不是很深。现在我正在尝试找出指针。
我编写了这段代码来测试是否可以在更改函数中更改 b 的值,并通过传入指针将其结转回主函数(不返回)。
但是,我收到一条错误消息。
1 2 | Initialization makes pointer from integer without a cast int *b = 6 |
据我了解,
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> int change(int * b){ * b = 4; return 0; } int main(){ int * b = 6; change(b); printf("%d", b); return 0; } |
我真的很担心修复这个错误,但如果我对指针的理解完全错误,我不会反对批评。
为了让它工作,重写代码如下 -
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> int change(int * b){ * b = 4; return 0; } int main(){ int b = 6; //variable type of b is 'int' not 'int *' change(&b);//Instead of b the address of b is passed printf("%d", b); return 0; } |
上面的代码可以运行。
在 C 语言中,当您希望更改函数中变量的值时,您"通过引用将变量传递给函数"。您可以在此处阅读更多相关信息 - 通过参考传递
现在错误意味着您试图将整数存储到作为指针的变量中,而不进行类型转换。您可以通过如下更改该行来消除此错误(但程序将无法运行,因为逻辑仍然是错误的)
1 | int * b = (int *)6; //This is typecasting int into type (int *) |
也许你想这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> int change( int *b ) { *b = 4; return 0; } int main( void ) { int *b; int myint = 6; b = &myint; change( &b ); printf("%d", b ); return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> int change(int * b){ * b = 4; return 0; } int main(){ int b = 6; // <- just int not a pointer to int change(&b); // address of the int printf("%d", b); return 0; } |
也许为时已晚,但作为对其余答案的补充,只是我的 2 美分:
1 2 3 4 5 6 7 8 9 10 11 12 | void change(int *b, int c) { *b = c; } int main() { int a = 25; change(&a, 20); --> with an added parameter printf("%d", a); return 0; } |
在指针声明中,你应该只分配其他变量的地址,例如"