| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1227 人关注过本帖
标题:书上有个不是很明白的地方,新手求教。
只看楼主 加入收藏
树森
Rank: 1
等 级:新手上路
帖 子:11
专家分:2
注 册:2011-3-6
结帖率:50%
收藏
已结贴  问题点数:5 回复次数:9 
书上有个不是很明白的地方,新手求教。
main()
{
struct stu
{
int num;
char *name;
char sex;
float score;
} boy1,boy2;
boy1.num=102;
boy1.name="Zhang ping";
printf("input sex and score\n");
scanf("%c %f",&boy1.sex,&boy1.score);
boy2=boy1;
printf("Number=%d\nName=%s\n",boy2.num,boy2.name);
printf("Sex=%c\nScore=%f\n",boy2.sex,boy2.score);
}


这是书上的例题,我想问,为什么要  char *name 才对,而char name 则错误
错误提示为    1    IntelliSense: "const char *" 类型的值不能用于初始化 "char" 类型的实体

在其他例题中  用char name[n] 却是可行的。
同样是char ,为什么 char sex 不用加 *

我是自学的,有很多没有搞懂的地方,希望各位多多指教,谢谢
搜索更多相关主题的帖子: input 
2011-08-21 15:43
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:1 
char name是一个字符
char name[100],*a可以是数组,也可以是字符串
2011-08-21 15:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
你首先要明白name用来表示什么,姓名不是?所以那是字符串,而char只是字符,对性别sex那是可以的。当你不用name[n]表示字符串的时候,改用指针,就必须用指针符号*,所以char* name是一个指针,它指向的数据类型是char。

你这个程序,即使编译成功,也是会崩溃的。

授人以渔,不授人以鱼。
2011-08-21 15:49
lin471306489
Rank: 4
等 级:业余侠客
帖 子:136
专家分:247
注 册:2011-8-16
收藏
得分:0 
恩恩,字符和字串
2011-08-21 17:19
死蜜蜂
Rank: 2
等 级:论坛游民
帖 子:16
专家分:15
注 册:2011-8-16
收藏
得分:1 
和楼上一样的对于字符与字符串的问题。还有就是这个IntelliSense: "const char *" 类型的值不能用于初始化 "char" 类型的实体
,const定义的是常量即不可修改的,这里是将指针所指的内存单元定义为常量,所以不能赋初始值
2011-08-21 21:28
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
赋值类型不匹配

                                         
===========深入<----------------->浅出============
2011-08-21 21:33
饭桶
Rank: 6Rank: 6
等 级:侠之大者
帖 子:165
专家分:422
注 册:2011-4-5
收藏
得分:1 
boy1.name="Zhang ping"这句是对的,在编译的时候"Zhang ping"会被看作字符串常量(静态存储),放在编码段中,
而字符串的名字就代表了该字符串所储存的地址(也也就是指针),这是对的,在《C.Primer.Plus.第五版》这本书中有清晰的说明,
你可以自己下载看看,我语文不是太好!

[ 本帖最后由 饭桶 于 2011-8-21 23:35 编辑 ]

人得一生得奋斗!
2011-08-21 23:24
饭桶
Rank: 6Rank: 6
等 级:侠之大者
帖 子:165
专家分:422
注 册:2011-4-5
收藏
得分:1 
IntelliSense: "const char *" 类型的值不能用于初始化 "char" 类型的实体
这句话的意思是不能把指针赋给一个实体(非指针)
"Zhang ping"返回的指针(静态存储)所以会有const限制,不允许修改。
对数组比如char name[10]="Zhang ping"这是初始化数组,这时"Zhang ping"不会被看做字符串常量
但不会有这种name[0]="Zhang ping"这时"Zhang ping"是字符串常量,"Zhang ping"同时也是字符串的名字代表着指针

[ 本帖最后由 饭桶 于 2011-8-21 23:35 编辑 ]

人得一生得奋斗!
2011-08-21 23:32
怎么会这样子
Rank: 2
来 自:广州
等 级:论坛游民
帖 子:31
专家分:39
注 册:2011-8-20
收藏
得分:0 
楼上的回答的好!
2011-08-23 14:38
树森
Rank: 1
等 级:新手上路
帖 子:11
专家分:2
注 册:2011-3-6
收藏
得分:0 
谢谢各位哈~
2011-08-24 12:53
快速回复:书上有个不是很明白的地方,新手求教。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017562 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved