C语言问题,急!!!
我想问一下,关于下面这个函数中的几个问题。printf("\t编号:");scanf("\t%d",&per[i].code);printf("\t姓名:");scanf...
我想问一下,关于下面这个函数中的几个问题。
printf("\t编号:");
scanf("\t%d",&per[i].code);
printf("\t姓名:");
scanf("\t%s",per[i].name);
这两句话中,为什么输入整型变量时,地址要加&,如果输入的字符型变量,地址就不要&? 这是为什么呢? 谢谢各位了!!
scanf("\t%s",per[i].name);
void Change(Person per[],int n)
{
char s[20];
int i=0;
printf("\t请输入想修改的记录中的名字:");
scanf("%s",s);
while(strcmp(per[i].name,s)!=0&&i<n) i++;
if(i==n)
{
printf("\t通讯录中没有此人!\n");
return;
}
printf("\t编号:");
scanf("\t%d",&per[i].code);
printf("\t姓名:");
scanf("\t%s",per[i].name);
printf("\t年龄:");
scanf("\t%s",per[i].age);
printf("\t手机号码:");
scanf("\t%s",per[i].phonenum);
printf("\t家庭电话:");
scanf("\t%s",per[i].familynum);
printf("\t通讯住址:");
scanf("\t%s",per[i].adds);
printf("\t电子邮箱:");
scanf("\t%s",per[i].email);
printf("\t关系情况:");
scanf("\t%s",per[i].relation);
printf("\t修改成功!");
} 展开
printf("\t编号:");
scanf("\t%d",&per[i].code);
printf("\t姓名:");
scanf("\t%s",per[i].name);
这两句话中,为什么输入整型变量时,地址要加&,如果输入的字符型变量,地址就不要&? 这是为什么呢? 谢谢各位了!!
scanf("\t%s",per[i].name);
void Change(Person per[],int n)
{
char s[20];
int i=0;
printf("\t请输入想修改的记录中的名字:");
scanf("%s",s);
while(strcmp(per[i].name,s)!=0&&i<n) i++;
if(i==n)
{
printf("\t通讯录中没有此人!\n");
return;
}
printf("\t编号:");
scanf("\t%d",&per[i].code);
printf("\t姓名:");
scanf("\t%s",per[i].name);
printf("\t年龄:");
scanf("\t%s",per[i].age);
printf("\t手机号码:");
scanf("\t%s",per[i].phonenum);
printf("\t家庭电话:");
scanf("\t%s",per[i].familynum);
printf("\t通讯住址:");
scanf("\t%s",per[i].adds);
printf("\t电子邮箱:");
scanf("\t%s",per[i].email);
printf("\t关系情况:");
scanf("\t%s",per[i].relation);
printf("\t修改成功!");
} 展开
6个回答
展开全部
楼主,因为是这样的,字符串是一个连续的内存空间,而且每一个字符串首元素对应有一子属于自己的指针,就是一个地址,就是说字符串的输出是输出一个地址,计算机会在这个地址对应的内存地址中取出你所指定的那一块连续的内存段,一般的结束标志是‘\0’或者是内存段长度长度超出,计算机就会中断打印出字符串,它的实质就是取首地址,输出对应内存段代表的值,接收字符串也是一样的原理,就是首指针就可以代表一个字符串,因为计算机内部会自动移动字符串指针的,而整型变量那些不一样,他们是一些独立的,不连续的内存段组成的,(一个整形变量是连续的内存段),他们的的标识符不能代表一个指针他们需要取出内存地址(变成指针)才能进行对内存的接收,就是这样的原理
展开全部
&为取地址运算符,在C语言中字符数组名代表该数组的起始地址,故不加& 。输入整型变量要&,你可以理解为取得该地址,往该地址写入数据
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输入的时候是往地址空间输入的
输入整型时,需要加取地址符号 &
而数组的话 数组名本身就是指针 表示的是首地址
所以不用加 &
输入整型时,需要加取地址符号 &
而数组的话 数组名本身就是指针 表示的是首地址
所以不用加 &
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为你的per[i].name中的name是一个字符数组,而数组名(在你的程序里即name)是数组第一个元素的地址,所以在输入时数组名的前面就不需要取地址符&了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C语言中规定数组名就代表数组首地址,也就是数组下表0的元素地址。数字数组也是可以像字符数组一样的,可以使用如下形式:
int per[5];
for(i=0;i<5;i++)
scanf("\t%d",(per+i));
不要用per[i]这种形式就可以了,我试验过了。
int per[5];
for(i=0;i<5;i++)
scanf("\t%d",(per+i));
不要用per[i]这种形式就可以了,我试验过了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
name本身就是地址,所以无需地址符号
code是变量名,所以需要
code是变量名,所以需要
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询