www.zhnq.net > sCAnF s A 为什么不用&Amp;

sCAnF s A 为什么不用&Amp;

scanf(“%s”,m);m前面为什么不用加&: 因为m代表的是字符串首地址 再看看别人怎么说的.

scanf(“%s”,m);//首先scanf这个函数是按照一定的输入格式从标准输入窗口获取数据,并将其赋值给变量;这里%s 是指输入一个字符串,而此处的m 即是一个字符串变量名,其本身就表示字符串m的首地址;因此无须再加取地址符&;printf

首先你要知道 & 为取地址符 它的作用是得到后面变量名的地址例如 int a;那么&a就是a变量所在的内存地址.而scanf要用的就是这个地址.对于“char s[30];”来讲,s在C语言中已经代表了这个数组的地址,就不用取地址符了.

scanf(“%s%s”,a,b );中不用&a,&b也是可以的.因为定义的字符数组名a,b本身就代表数组a和b的首地址,所以,使用scanf(“%s%s”,a,b );和scanf(“%s%s”,&a,&b );是等价的.

字符串在内存中连续存放的,以'\0'作为结束,只要得到首地址,便可以整个的篡夺;字符数组a[],数组名a 本身就指向首地址,即数组存放的字符串的首地址,是以不加&;字符指针 *a 也是指向字符串的首地址,是以不加&

是的,不取地址不能赋值scanf()定义是int scanf(const char *format, );我们赋值时是调用这个已经是别人封装好的函数,需要赋值的变量是个指针形式的,所以必须取地址才能赋值

你的语句已经表明%s其实是要输入一个字符串,那么我相信你的STR其实是表示一个字符串的变量,那么和数组的一样,STR其实就是表示这个字符串的首地址了.我们在SCANF中使用&,是指将值放入这个地址中,现在已经是地址了,当然不需要了.如果你一定要用的话,可以改成scanf("%s",&str[0]).不过我突然想到我以前用过的情况,在一个结构变量中有一个成员是字符串,我用不用&都不报错,也不知道为什么.

举例:char str[256]; scanf("%s",str); 其中str是数组名,已经代表数组的起始地址了,也可以这么写:scanf("%s",&str[0]);

scanf()函数中没有精度控制. 如: scanf("%5.2f",&a); 是非法的.不能企图用此语句输入小数为2位的实数. 具体细节,可参阅百度百科~

&是取地址符,scanf把所输入的字符存到该地址,printf是打印该地址的内容,不需要&

相关搜索:

友情链接:6769.net | 9213.net | zxqt.net | sytn.net | nmmz.net | 网站地图

All rights reserved Powered by www.zhnq.net

copyright ©right 2010-2021。
www.zhnq.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com