为什么在scanf函数中需要&符号(&).以下C代码中的输出或错误类型(编译或运行时)是什么?
#include <stdio.h>
void main() {
int a;
printf("enter integer:");
scanf("%d", a);
}
Run Code Online (Sandbox Code Playgroud)
aby*_*byx 12
该&在C是返回操作数的地址与运营.想想这样说,如果你想简单地给scanf变量a没有&,它会按值,这意味着要传递给它scanf不能将其值设置给你看.通过引用传递(使用&实际传递指针a)允许scanf设置它,以便调用函数也将看到更改.
关于具体的错误,你无法真正说出来.行为未定义.有时候,它可能会默默地继续运行,而你却不知道scanf在程序的某个地方改变了某些值.有时它会导致程序立即崩溃,就像在这种情况下:
#include <stdio.h>
int main()
{
int a;
printf("enter integer: ");
scanf("%d",a);
printf("entered integer: %d\n", a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译它显示了这个:
$ gcc -o test test.c
test.c: In function ‘main’:
test.c:6: warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘int’
Run Code Online (Sandbox Code Playgroud)
并执行显示分段错误:
$ ./test
enter integer: 2
Segmentation fault
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6189 次 |
| 最近记录: |