黑马程序员技术交流社区
标题:
OC学习笔记之结构体用于类成员变量的问题
[打印本页]
作者:
chunhuayun
时间:
2015-10-4 10:21
标题:
OC学习笔记之结构体用于类成员变量的问题
结构体用于类成员变量要注意的问题
直接上代码,里面有解释和问题所在
<font size="4">#import <Foundation/Foundation.h>
#pragma mark 日期结构体定义
typedef struct {
int year;
int month;
int day;
}MyDate;
#pragma mark 人类声明部分
@interface Person : NSObject {
@public
NSString *_name;
MyDate _birthday;
}
//说话,说出自己的名字和生日
-(void) speak;
@end
#pragma mark 人类实现部分
@implementation Person
-(void)speak{
NSLog(@"My name is %@, my birthday is in %d-%0d-%0d",_name,_birthday.year,_birthday.month,_birthday.day);
}
@end
int main(int argc, const char * argv[])
{
@autoreleasepool {
Person *p = [Person new];
p->_name = @"Amos";
//这样会报错
//p->_birthday = {1991,3,1}; (1)
//解决方法一:
p->_birthday = (MyDate){1991,3,1};
//解决方法二:
MyDate date = {1901,3,1};
p->_birthday = date;
//原因:因为类person在分配内存的时候会在堆区给自己的成员变量进行初始化,基本数据类型会被初始化为0,此时year,month,day都已经被初始化为0
//(1)处报错是因为,编译器并不知道{1991,3,1}返回的是数组还是结构体,因此需要强制转换一下。
}
return 0;
}</font>
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2