C语言的scanf函数中,从键盘输入的值应该是赋给指定的地址。所以变量必须使用取地址符号进行赋值。
如果书写错误遗漏取地址符号,系统会自动将变量的值转换为地址值后,将值赋给指定的地址,这就导致出现非法访问,轻则程序出错,重则软件崩溃闪退。
以下代码为例:
int a;
a=0x300;
scanf("%d",a);
执行后,因a的值为0x300,系统会将用户输入的值赋给0x00000300这个内存,如果幸运没有造成软件异常的话,会导致这个内存中的值被修改为用户输入的值。如果这个位置是数据还好,如果是程序段的话会使得运行到这个位置后出现莫名的异常。
执行后,因为a的值未被修改,所以a本身仍然是0x300.