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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

结构体用于类成员变量要注意的问题
直接上代码,里面有解释和问题所在
  1. <font size="4">#import <Foundation/Foundation.h>
  2. #pragma mark 日期结构体定义
  3. typedef struct {
  4.     int year;
  5.     int month;
  6.     int day;
  7. }MyDate;

  8. #pragma mark 人类声明部分
  9. @interface Person : NSObject {
  10.     @public
  11.     NSString *_name;
  12.     MyDate _birthday;
  13. }
  14. //说话,说出自己的名字和生日
  15. -(void) speak;

  16. @end

  17. #pragma mark 人类实现部分
  18. @implementation Person

  19. -(void)speak{
  20.     NSLog(@"My name is %@, my birthday is in %d-%0d-%0d",_name,_birthday.year,_birthday.month,_birthday.day);
  21. }

  22. @end



  23. int main(int argc, const char * argv[])
  24. {

  25.     @autoreleasepool {
  26.         Person *p = [Person new];
  27.         p->_name = @"Amos";
  28.         
  29.         //这样会报错
  30.         //p->_birthday = {1991,3,1};    (1)
  31.         //解决方法一:
  32.         p->_birthday = (MyDate){1991,3,1};
  33.         //解决方法二:
  34.         MyDate date = {1901,3,1};
  35.         p->_birthday = date;
  36.         
  37.         //原因:因为类person在分配内存的时候会在堆区给自己的成员变量进行初始化,基本数据类型会被初始化为0,此时year,month,day都已经被初始化为0
  38.         
  39.         //(1)处报错是因为,编译器并不知道{1991,3,1}返回的是数组还是结构体,因此需要强制转换一下。
  40.     }
  41.     return 0;
  42. }</font>
复制代码



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马