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

本文详细解析了C语言中输入输出的基本概念,包括取地址运算符的使用、scanf与printf函数的区别,以及针对不同变量类型如何正确进行输入输出操作。通过具体示例,帮助读者掌握数组和指针类型的特殊处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

情况一:

&是一个取地址运算符
&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语言过程中遇到的问题和总结,喜欢的关注!

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梁同学与Android

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值