LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 633|回复: 8

这里怎么多出个3 ?

[复制链接]
发表于 2004-8-19 00:04:44 | 显示全部楼层 |阅读模式
  1. #include<stdio.h>
  2.                                                                                 
  3. struct stu
  4. {
  5.   char [color=darkblue]*name[/color];
  6.   char [color=darkblue]sex[/color];                     
  7.   [color=orange]float score;[/color]
  8.   int age;
  9. } aa={"shellon",'M',[color=orange]88.8[/color] ,21},*bb;
  10.                                                                                 
  11. main()
  12. {
  13.   bb=&aa;
  14.                                                                                 
  15.   printf("name=%s\t\tsex=%c\n",aa.name,aa.sex);
  16.   printf("score=%f\t\tage=%d\n\n",aa.score,aa.age);
  17.                                                                                 
  18.   printf("name=%s\t\tsex=%c\n",(*bb).name,(*bb).sex);
  19.   printf("score=%f\t\tage=%d\n\n",(*bb).score,(*bb).age);
  20.                                                                                 
  21.   printf("name=%s\t\tsex=%c\n",bb->name,bb->sex);
  22.   printf("score=%f\t\tage=%d\n\n",bb->score,bb->age);
  23. }
复制代码



1: 请问出来的结果多出了个3 ?


name=shellon            sex=M
score=88.800003         age=21

name=shellon            sex=M
score=88.800003         age=21

name=shellon            sex=M
score=88.800003         age=21


2: 另一个问题是蓝色部分怎么一个需要指针,一个不需要呢 ?

我刚学,很多不懂,麻烦高手们说说,,,万分感谢dd
发表于 2004-8-19 08:31:31 | 显示全部楼层
第一个问题与编译和计算机原理有关,暂时可以不必深究,但应注意float型数据是有精度问题的,输出时应该限制一下它的位数,比如
printf("%.2f", score); 保留两位小数


第二个问题你需要去看一下C语言教材中的“指针,数组与字符串”相关部分
发表于 2004-8-19 11:17:22 | 显示全部楼层
用double就不会多3了。
发表于 2004-8-19 15:22:52 | 显示全部楼层
精度问题总是存在的,这个涉及到浮点数的二进制表示(ieee标准),版主说的对,看看计原头几章自然就明白了。反正用到浮点数,心里就要想到不会完全准确,有这个意识,自然可以避免一些错误(例如直接比较两个浮点数是不是相等)。
btw,double可是要多占一倍的内存呢
 楼主| 发表于 2004-8-20 01:50:59 | 显示全部楼层
谢谢你们

可这里的
  char *name;
  char sex;        

为什么一个要用指针,一个不用,可以简单解释一下吗 ?
发表于 2004-8-20 08:34:14 | 显示全部楼层
char sex; 是一个字符,比如你程序里给它赋值‘M’

char *name; 是一个字符指针(可以理解为字符串),你程序里给它赋值是一个字符串"shellon",实际上name是指向一片内存空间首地址的指针,这个空间的大小能放下9个字符(shellon加上一个'\0')

你可以把sex定义为char *, 但这时赋值要写成”M“,用双引号

你不能把name定义为char,因为这样只能装下一个字符,可你至少需要装8个
 楼主| 发表于 2004-8-20 20:45:03 | 显示全部楼层
懂了一半,char *name;那这个里面可以放多少字符 ?都没指定 ?

""与''怎么用 ? 为什么有些要用"",有些用''

总之谢谢你了,,,虽然我的问题很基础,但我确实是看了很多遍都不懂,,希望你们别见怪,,,,,谢谢你一直这么耐心帮助我,,
发表于 2004-8-20 21:18:54 | 显示全部楼层
比如char *name="shell";
在这里,name只是指向"shell"这个字符串开始的位置。

""里面是一个字符串,''里面是一个字符.

最初由 shell 发表
懂了一半,char *name;那这个里面可以放多少字符 ?都没指定 ?

""与''怎么用 ? 为什么有些要用"",有些用''

总之谢谢你了,,,虽然我的问题很基础,但我确实是看了很多遍都不懂,,希望你们别见怪,,,,,谢谢你一直这么耐心帮助我,,
 楼主| 发表于 2004-8-20 21:30:07 | 显示全部楼层
明白,谢谢你
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表