为什么这样做?
int *var;
while(scanf("%d", &var) && *var != 0)
printf("%d \n", var);
虽然这不是?
int *var;
while(scanf("%d", &var) && var != 0)
printf("%d \n", var);
*(解引用运算符)不是给你指针指向的值吗?那为什么 *var != 0 会使程序崩溃,而 var != 0 不会?
这有效:
int* var = malloc(sizeof(int));
while(scanf("%d", var) && *var != 0)
printf("%d \n", *var);
正在学习 C 语言的进修类(class),很高兴我做到了。
我意识到 scanf(&var) 用于常规变量,而 scanf(var) 用于指针。但是完全忘记了内存,谢谢!
最佳答案
我不确定您所说的“有效”是什么意思,但第一个是错误的,因为在第一个示例中您使用 var 指向的内容并将其与零进行比较,并且由于 var 已被初始化为用户的内容输入时,var 指向的地方不太可能是有效位置。
*var != 0
这采用用户定义的 var
指向的值。
请注意,在 scanf 中,您正在扫描一个整数到 int **,而不是 int *,并且 printf 使用 %d 打印一个指针,而不是一个整数。
当您出于各种原因执行未定义的事情时,事情可能看起来有效或失败。您应该理解为什么您正在编写的代码是正确的,而不是写下一些代码并对其进行更改直到它起作用。
关于C指针问题,取消引用崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2893675/