情况一:
&是一个取地址运算符
&a是一个表达式,其功能是求变量a的地址
scanf函数的一般形式为:scanf("格式控制字符串",地址列表)
;
scanf输入的是地址,printf输出的是值,如下举例说明
#include<stdio.h>
void main() {
int a,b,c;
printf("input the value of a,b,c\n");
scanf("%d %d %d",&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
运行结果如下
由上,我们一定要分清变量的地址和变量的值之间的关系,例如:
a = 567
a为变量名,567为变量值,&a为变量的地址
情况二:
当变量是指针类型时,不需要取地址符号,指针指向的是某一个存储单元的首地址。
当变量是数组,不需要取地址符号,数组名本身指向的就是这个数组的首地址。
其它类型变量需要用&取地址符号。
实战1:
在这里有的同学就会问,啊,小编,你不是说当变量是数组,不需要取地址符号嘛,那我下面这个例子怎么输入了数没有反应,输出语句什么都输出不出来
#include<stdio.h>
void main() {
double a[2],s = 0;
for(int i = 0;i<2;i++) {
scanf("%lf",a[i]);
s += a[i];
}
printf("s:%f\n",s);
}
小编修改上面的代码为
#include<stdio.h>
void main() {
double a[2],s = 0;
for(int i = 0;i<2;i++) {
scanf("%lf",&a[i]);
s += a[i];
}
printf("s:%f\n",s);
}
注意:要在a[i]
前面加取地址符号,因为在情况一中我们已经说过,scanf输入的是地址,a[i]
代表的是i号下标的值,而不是地址,所以我们要为数组的每一个下标分别赋值,也就是&a[i]
&a[0]
就是0号下标的地址,&a[1]
就是1号下标的地址
实战2
# include <stdio.h>
int main(void)
{
char str[10]; //str是string的缩写, 即字符串
printf("请输入字符串:");
scanf("%s", str); /*输入参数是已经定义好的“字符数组名”, 不用加&, 因为在C语言中数组名就代表该数组的起始地址*/
printf("输出结果:%s\n", str);
return 0;
}
以上就是小编在学习c语言过程中遇到的问题和总结,喜欢的关注!