关于strcmp()函数参数的问题

chujiu0109 2011-08-05 08:37:01

#include "stdio.h"
#include "string.h"

struct student
{
char name[10];
int age;
int score;
};

int main(void)
{
struct student information[3]=
{ {"zhaoxin",22,99},{"lixiao",21,89},{"chenhui",20,92} };
struct student *p_stu=information;
char temp[10];
int i,flag=0;

printf("Enter name:");
scanf("%s",temp);

for(i=0;i<3;i++,p_stu++)
if(strcmp(temp,p_stu->name)==0)
/*strcmp的两个参数不都是地址吗,但是p_stu->name不是地址啊,
为什么运行起来结果是对的,我改成&p_stu->name后运行后也对,
难道两个都行码??? */

{
printf("Yes\n");
flag=1;
break;
}

if(flag==0)
printf("No\n");


return 0;
}
...全文
458 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cao_julians 2011-08-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 aa1013911535 的回复:]
引用 4 楼 qwer_boo 的回复:
p_stu->name就是char name[20]的首地址

+1
[/Quote]
技术术语不准确(尽管大家都这么说)!
p_stu->name就是char name[20]首元素的地址,这个是字符串的首址
而&p_stu->name才是char name[20]的首地址,是数组的首址,不代表字符串的首址

许多人认为两者的地址值相同即可,但这两者的指针类型是不相容的!

aa1013911535 2011-08-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qwer_boo 的回复:]
p_stu->name就是char name[20]的首地址
[/Quote]
+1
chujiu0109 2011-08-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 cao_julians 的回复:]
引用 8 楼 aa1013911535 的回复:
引用 4 楼 qwer_boo 的回复:
p_stu->name就是char name[20]的首地址

+1

技术术语不准确(尽管大家都这么说)!
p_stu->name就是char name[20]首元素的地址,这个是字符串的首址
而&p_stu->name才是char name[20]的首地址,是数组的首址,不代表字……
[/Quote]

但如果一开始并没有对information[3]初始化,结构成员char name[10]也就没有存储字符串,
何来p_stu->name是字符串的首地址一说?
在路上吗 2011-08-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 cao_julians 的回复:]
引用 8 楼 aa1013911535 的回复:
引用 4 楼 qwer_boo 的回复:
p_stu->name就是char name[20]的首地址

+1

技术术语不准确(尽管大家都这么说)!
p_stu->name就是char name[20]首元素的地址,这个是字符串的首址
而&p_stu->name才是char name[20]的首地址,是数组的首址,不代表字……
[/Quote]
学习了
luciferisnotsatan 2011-08-05
  • 打赏
  • 举报
回复
p_stu->name 数组名就是数组首地址
p_stu->age age是int一个变量,不是数组。这里就是age的值,不是age的地址
chujiu0109 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hnuqinhuan 的回复:]
p_stu->name就是char name[20]的首地址啊
&p_stu->name在我的编译器上是不行的
[/Quote]

那p_stu->age是不是就是int age的首地址,可是我这样赋值*p_stu->age=22;
编译通不过,它提示“*的操作数必须是指针”,只能这样赋值p_stu->age=22;
这样赋值后结果正确了.
l369294289 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jixingzhong 的回复:]

关键看指针的地址是引用到哪里的。
[/Quote]
版主出山了,强势围观~~~~~
qwer_boo 2011-08-05
  • 打赏
  • 举报
回复
p_stu->name就是char name[20]的首地址
在路上吗 2011-08-05
  • 打赏
  • 举报
回复
字符数组的名字就代表它的首地址,p_stu->name就是里面那个字符数组的名字,至于后面那个问题我试着用输出了一下这个

printf("%o %o\n%o %o\n",temp,&temp,p_stu->name,&p_stu->name);

发现temp和&temp的值是一样的,后面的一对也是,既然一样的话结果肯定没问题,是对的。
原因我也不清楚,想可能编译器在处理字符数组的名字时的一种方法?
jixingzhong 2011-08-05
  • 打赏
  • 举报
回复
关键看指针的地址是引用到哪里的。
無_1024 2011-08-05
  • 打赏
  • 举报
回复
p_stu->name就是char name[20]的首地址啊
&p_stu->name在我的编译器上是不行的

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧