结构体用于类成员变量要注意的问题
直接上代码,里面有解释和问题所在
- <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>
复制代码
|
|