C语言中 用scanf函数输入字符串数组,取地址符&是不用输的,如果输了取地址符算错么 ,或者含义不一样么?

charname[20];scanf("%s",name);scanf("%s",&name);... char name[20];
scanf("%s",name);
scanf("%s",&name);
展开
 我来答
小夏聊生活
高能答主

2019-12-07 · 专注于分享生活知识,热爱生活
小夏聊生活
采纳数:448 获赞数:114616

向TA提问 私信TA
展开全部

不一样。

C语言的字符串为数组形式,而数组的名称可以表示其地址,故对字符串输入不需要加地址符。而单独的字符、整型变量等的名称不能直接表示地址,故需要加地址符。

数组名就代表了该数组的地址。整个数组是一块连续的内存单元,数组名所代表的地址为第0个元素的地址,c就代表c[0]的地址。

设数组c的首地址为0X2000,也就是说c[0]地址为0X2000,则数组名c就代表这个首地址。因为c已经表示地址,所以在c前面不能再加取地址符&。

字符串数据类型是建模在形式字符串的想法上的数据类型。字符串是几乎在所有编程语言中可以实现的非常重要和有用的数据类型。

扩展资料

为了避免这种情况,可多设几个字符数组分段存放含空格的串。程序可改写如下:

#include<stdio.h>

intmain()

{

char str1[20], str2[20], str3[20];

printf("Input string: ");

scanf("%s %s %s %s",str1,str2, str3);

printf("Your string: %s %s %s %s\n",str1, str2, str3);

}

运行结果:

Input string: C C++ Java

Your string: C C++ Java

lgao622
2015-09-17 · 知道合伙人软件行家
lgao622
知道合伙人软件行家
采纳数:1137 获赞数:6550
毕业于武汉工程大学邮电与信息工程学院通信专业,软件行业,4年工作经验。

向TA提问 私信TA
展开全部
  1. 一般变量使用取地址符,是获取其地址,即为指向该变量的指针。

  2. 数组名就是数组的首地址,指向该数组的第一个元素的指针,只不过是常量指针而已。所以不用再加取地址符。

  3. 要加的话可以如下:

    char str[10]; 

    scanf("%s", &str[0]); // 取第一元素的地址,等价于数组名  str

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
poseidon_k
2012-11-01 · TA获得超过2580个赞
知道小有建树答主
回答量:1223
采纳率:0%
帮助的人:315万
展开全部
在VC中name和&name是一样的,都可以做右值表示数组的首地址,scanf("%s",&name)和scanf("%s",name)一样,不过不知道C标准中是怎样规定的,有可能在别的编译器中&name不允许。VC经常会在某些细节上不遵守C标准,你懂的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
张大爷003
2012-11-01
知道答主
回答量:6
采纳率:0%
帮助的人:9345
展开全部
scanf("%s",name)这种形式是对的name已经代表数组name[20]的首地址了再加&就成了首地址的地址了;数组中元素的地址这样表示&name[n];没有你说的这种形式
]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
雪山魔云
2019-08-29
知道答主
回答量:3
采纳率:0%
帮助的人:2209
展开全部
我做单片机程序的,实际测试过
char name[20];
scanf("%s",name);
scanf("%s",&name);
name=&name 这两个地址的整型值相同
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式