二者的区别是一个是取变量的值,一个是取地址。scanf(%d",&a) 是读取整型变量a在内存中的地址,而scanf("%d",a)是读取整型变量a的值。
&是取地址的意思,&a是取出变量a的地址scanf(%d",&a) 就是读取1个数字,写入a的地址,scanf("%d",a),是读取1个数字,写入地址a,这个a如果是100,就写到地址100。如果是200,就写到地址200,显然,这很危险,万一a的存储的值刚刚好是一些指令的地址什么的,会写到这个地址修改指令,就运行不下去了,出大错。printf("%d",a) 就没什么了 把变量a的存储的值输出然后&是取地址。
拓展资料:
1、在HTML或SGML文档中,用于指明有字符存在(特殊字符)的默认符号。
2、在电子制表程序中,用于在描述单元格相互关系的公式中插入文本的操作符。
3、英文中代表and,也可读and。
4、该字符读音“z'da”。
5、&还有“联合”的意思。比如“A&B”公司,就是“A”和“B”两间公司合并起来的。
6、在某些电脑语言,如java中,表示按位进行“与”运算。
7、英文拼写:ampersand。
8、高级语言中的取地址符,如:“int a=0;int *p;p=&a;”,意为取变量a的地址给指针p。
9、C语言中两个&&表示“与”运算。如:while(a==9&&b==5) 表示当a等于9且b等于5时,条件成立。
10、Matlab中,&表示“与”运算(对应地,|表示“或”运算),但Matlab较高版本(如:Matlab R2008b)中,也承认&&的写法。在以上的意义中,以第3和第5项的用法最为普遍。
11、在vfp 数据库中,&是一个宏代换函数,用内在变量的值来代替&及变量名。
12、在Pascal中,&是八进制整型常量的前缀,如&7表示7 , &17表示15 , &177表示127 。
13、&还被大量引入到艺术创作与设计中。
14、bat中的命令,&之后顺序执行多条命令,不管命令是否成功。
15、在Visual Basic中使用命令按钮时,(&字母)代表将该字母设为快捷键。如在命令按钮的Caption属性中输入“确定(&K)”则表示K为“确定”事件的快捷键。
16、起标识作用。C++中引用的声明方法:类型标识符 &引用名=目标变量名,&在此不是求地址运算,而是起标识作用。
资料来源:百度百科:&
scanf(%d",&a) 就是读取整型变量a在内存中的地址 。
scanf("%d",a)就是读取整型变量a的值。
printf("%d",a) 就是输出整型a的值。
在C语言中,&是取地址运算符,&a表示获取a在内存中的地址。%d 格式化输出整数。scanf() 函数用于从标准输入(键盘)读取并格式化, printf() 函数发送格式化输出到标准输出(屏幕)。
在C语言中,%f表示 格式化输出浮点型数据。
例如:
#include <stdio.h>
int main(){
float f;
printf("Enter a number: "); // %f 匹配浮点型数据
scanf("%f",&f); printf("Value = %f", f);
return 0;
}
scanf(%d",&a) 就是读取1个数字 写入a的地址
scanf("%d",a) 是读取1个数字 写入地址a 这个a如果是100 就写到地址100 如果是200 就写到地址200 显然 这很危险 万一a的存储的值刚刚好是一些指令的地址什么的 会写到这个地址修改指令 就运行不下去了 出大错
printf("%d",a) 就没什么了 把变量a的存储的值输出
然后 &是取地址 所以你可以
printf("%d",&a) 这样是输出a的地址
如果a是一个int变量,a = 1,存储在内存的1234 5678H处,scanf(%d",&a)是正确写法,表示将输入读到变量a所在的地址处,即内存的1234 5678H处
而在执行时scanf("%d",a)会发生错误,因为将输入读到了内存的0000 0001H处