c语言编程输入时为什么一维数组要加地址符,字符数组就不用呢
因为字符数组,数组名本身就是指一个地址。
定义了字符型数组char name[10]。name有两个含义:一个是代表着name这个数组第一个位置的地址,也就是name[0]的地址。可以说name就等价于&name[0]。
还有一种意思就是指代name整个数组。&name 就是整个数组的首地址。所以name和&name取得的地址是相同的。
扩展资料
name和&name区别:
不同点在于:name+1表示的是数组第二个元素的地址,而&name+1表示的是整个数组后又一个name数组的首地址,即&name[10]后一个新的name数组的首地址。例如:
#include<stdio.h>
int main(void)
{
char name[10]={"hello csdn"};
printf("name+1的地址:%p\n",name+1);
printf("&name+1的地址:%p\n",&name+1);
return 0;
}
所以说scanf("%s",name);和scanf("%s",&name);执行后的结果是一样的,都是name的首地址,都是给字符数组name赋值。推荐用 scanf("%s",name); ,第二种不容易理解也容易犯错,有些编译软件也不支持会报错。
在C语言中,数组的名字本身就是一个指针即为起始地址,字符数组也是一样的。比如
int a[2] = {1,2};
int *p = a; //a本身就是一个指针,它表示数组的起始地址。
char str[20] = "hello";
char *pstr = str; //str本身就是一个指针,它表示数组的起始地址
数组的名字,等同于第一个元素的地址。以上面数组a和str为例,a本身是个地址,它等同于&a[0]获取的地址。str等同于&str[0]。
char str[100];
str 其实就是 &str[0]
因此 scanf("%s", str); 也可以写成 scanf("%s", &str[0]);
嗯,我刚试了下确实都可以不加,只是以这个str[i]形式输入时就必须加&了是吧?
#include
void main()
{
char a[5];
scanf("%c",a);//格式控制符是%c和%s结果是一样的,为什么啊?
printf("%c",a[0]);
}
还有数组名既然代表的既然是首地址,为什么只输数组名就能输入整个数组元素呢?
str[i] 是char类型的,当然要取它的地址
#include
void main()
{
char a[5];
scanf("%c",a); // %c只能格式化一个字符,也就是赋值给a[0],你输入后面的都不会保存到a[0]后面的元素
printf("%c",a[0]); // 这里打印的就是a[0]
}
char a[3];
int b[3];
int i=0;
for(i=0;i<3;i++)
{
scanf("%c",&a[i]);
scanf("%d",&b[i]);
}
输入的后一个参数为地址
2018-07-02
#include <stdio.h>
main()
{
int i,a[20],sum,count;
sum=count=0;
for(i=0;i<20;i++)
scanf("%d",&a[i]);
} 这个是一维数组输入要用的。二维函数有时候也要,有时候却不用,我也不清楚。
你可以参考这个