鱼C论坛

 找回密码
 立即注册
查看: 5852|回复: 13

关于scanf中地址符的问题

[复制链接]
发表于 2013-1-9 22:16:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. main()
  3. {
  4. char a[10],b[10];
  5. scanf("%s",&a);
  6. printf("字符串a:%s\n",a);
  7. scanf("%s",b);
  8. printf("字符串b:%s\n",b);
  9. }
复制代码
QQ截图20130109221758.png       为什么加不加地址符都可以正确的给数组a数组b赋值
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-9 22:25:40 | 显示全部楼层
其实无论是a或是b,它们都是代表的是一个地址(因为你申明的是字符串,所以...),但你第5行那用&a的时候相当于是取a[1]的地址(也是字符串的首地址,a也是字符串的首地址),而你的第7行b是字符串的首地址,所以总结一句就是:不用加取址符&就行了。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-9 22:27:19 | 显示全部楼层
因为数组本身就是地址,你可以测试:printf ("%d,"a)   可以看看a的地址
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-9 22:27:54 | 显示全部楼层
有一点说错了,&a取的是a[0]的地址
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-1-9 22:31:12 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-10 02:16:35 | 显示全部楼层
tcwz 发表于 2013-1-9 22:31
&a不是指  取a所代表地址的地址吗

在Scanf中, '&'有負值的意思
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-10 05:05:49 | 显示全部楼层
你那程序, 用scanf("%s", a);这条语句,如果不小心, 会出现数组越界的。。。。。因为你没限制其输入的长度
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-1-10 12:14:32 | 显示全部楼层
喜欢散步 发表于 2013-1-10 05:05
你那程序, 用scanf("%s", a);这条语句,如果不小心, 会出现数组越界的。。。。。因为你没限制其输入的长度 ...

答非所问啊
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-1-10 12:15:37 | 显示全部楼层
kit1858644 发表于 2013-1-10 02:16
在Scanf中, '&'有負值的意思

是赋值还是负值    。。   我想知道为啥加不加都没错呢
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-10 20:04:26 | 显示全部楼层
楼主,我不是说你了吗。我感觉你应该好好看看书
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-10 20:23:11 | 显示全部楼层
tcwz 发表于 2013-1-9 22:31
&a不是指  取a所代表地址的地址吗

你如果定义a是一个数组,这里的a就不是数组名,而是数组第一个位置的地址,a[0]相当于地址a+0;这也就是为什么数组是从0开始。而你定义变量,这个变量就是一个名字,需要加&,即取该变量的地址。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-10 20:23:17 | 显示全部楼层
tcwz 发表于 2013-1-9 22:31
&a不是指  取a所代表地址的地址吗

你如果定义a是一个数组,这里的a就不是数组名,而是数组第一个位置的地址,a[0]相当于地址a+0;这也就是为什么数组是从0开始。而你定义变量,这个变量就是一个名字,需要加&,即取该变量的地址。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-11 00:05:29 | 显示全部楼层
C语言中数组名代表数组的起始地址, 规定的
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-1-11 10:50:34 | 显示全部楼层
喜欢散步 发表于 2013-1-11 00:05
C语言中数组名代表数组的起始地址, 规定的

这我知道啊   我问的是为什么对一个地址来说  加不加地址符都可以正确的读入读出
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-9 08:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表