C语言小知识点 汇总6
知识点12:
用scanf输入字符串(s%)时为什么不需要&
Int a,b;
scanf("%d,%d",&a,&b);
Sum=a+b;
Printf(“sum is %d\n”,sum);
Scanf 函数的作用是输入a和b的值,&a和&中的“&”的含义是“取地址”,此scanf函数的作用是将两个数值分别输入到变量a和b的地址所标志的单元中,也就是输入给变量a和b。
那么在输入字符串时,为什么不需要&呢?
char s[10];
scanf("%s",s);
因为在c程序中,可以用两种方法访问字符串:
1、用字符数组存放一个字符串
2、用字符指针指向一个字符串
C中数组名就是数组首地址的意思,所以没必要再用& 取地址了
例:
char s[10];
scanf("%s",s);
改为scanf("%s",&s);也正确,为什么?
求解释
1 s与&s都表示地址,且值相等。
2 s与&s类型不一样,s的类型为char *,&s的类型为char (*)[10],即指向一行有10个字符的指针。
3 在scanf("%s",&s);语句中,&s有一个隐含的强制类型转换,即相当于scanf("%s",(char *)&s);