A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 liu01230 于 2015-5-11 23:05 编辑
  1. #import <Foundation/Foundation.h>
  2. @interface Students : NSObject
  3. {
  4.     @public
  5.     char *name;
  6.     double score;
  7.     int age;
  8. }
  9. - (void)eat;
  10. - (void)study;
  11. @end

  12. @implementation Students
  13. - (void)eat
  14. {
  15.     NSLog(@"名字为%s的人在吃饭", name);
  16. }
  17. - (void)study
  18. {
  19.     NSLog(@"名字为%s的人的学习成绩为%.1f。", name, score);
  20. }
  21. @end

  22. int main()
  23. {
  24.     Students *s = [Students new];
  25.     s->name = "张三";
  26.     s->age = 18;
  27.     s->score = 89.5;
  28.    
  29.     [s eat];
  30.     [s study];
  31. }
复制代码
为什么输出的是:
名字的人在吃饭
名字为的人的学习成绩为89.5。

当把name的值改为英文字符的时候输出就正常了,这是为什么?

9 个回复

倒序浏览
  1. #import <Foundation/Foundation.h>
  2. @interface Students : NSObject {
  3. @public
  4.     NSString * name;
  5.     double score;
  6.     int age;
  7. }
  8. - (void)eat;
  9. - (void)study;
  10. @end

  11. @implementation Students
  12. - (void)eat {
  13.     NSLog(@"名字为%@的人在吃饭", name);
  14. }
  15. - (void)study {
  16.     NSLog(@"名字为%@的人的学习成绩为%.1f。", name, score);
  17. }
  18. @end

  19. int main() {
  20.     Students * s = [Students new];
  21.     s->name = @"张三";
  22.     s->age = 18;
  23.     s->score = 89.5;

  24.     [s eat];
  25.     [s study];
  26. }
复制代码
回复 使用道具 举报
char *name;
因为你Student类定义的 *name类型是char类型,而你在赋值的时候给它赋的是 字符串类型,所以没有赋值 成功,所以就没有值 显示出来 ,楼主看看是不是我说的这个情况 。
回复 使用道具 举报

那为什么写成英文字符就可以输出呢?
回复 使用道具 举报
王二小。 发表于 2015-5-12 10:09
char *name;
因为你Student类定义的 *name类型是char类型,而你在赋值的时候给它赋的是 字符串类型,所以 ...

不是的,char *name就是字符串类型的,name在这里是指针,指向字符串的首地址
回复 使用道具 举报

知道了,上面的代码没有看:L
回复 使用道具 举报
liu01230 发表于 2015-5-12 11:49
不是的,char *name就是字符串类型的,name在这里是指针,指向字符串的首地址 ...

不对吧,那也应该是字符的指针,不是字符串的指针阿,应该是指向字符的地址吧?
回复 使用道具 举报
因为NSLog不能输出C语言字符串
回复 使用道具 举报
chensc 金牌黑马 2015-5-12 18:15:03
9#
学习学习!
回复 使用道具 举报
顶、、、、、、、、、、、、、
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马