C语言 什么时候用取地址什么时候不用取地址,&符号讲解

情况一:

&是一个取地址运算符
&a是一个表达式,其功能是求变量a的地址
scanf函数的一般形式为:scanf("格式控制字符串",地址列表);
scanf输入的是地址,printf输出的是值,如下举例说明

#include
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);
}

运行结果如下
C语言 什么时候用取地址什么时候不用取地址,&符号讲解_第1张图片由上,我们一定要分清变量的地址和变量的值之间的关系,例如:
a = 567
a为变量名,567为变量值,&a为变量的地址

情况二:

当变量是指针类型时,不需要取地址符号,指针指向的是某一个存储单元的首地址。
当变量是数组,不需要取地址符号,数组名本身指向的就是这个数组的首地址。
其它类型变量需要用&取地址符号。

实战1:
在这里有的同学就会问,啊,小编,你不是说当变量是数组,不需要取地址符号嘛,那我下面这个例子怎么输入了数没有反应,输出语句什么都输出不出来

#include

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

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语言过程中遇到的问题和总结,喜欢的关注!

你可能感兴趣的:(C,什么时候用取地址什么时候不用,c语言取地址符号讲解)