黑马程序员技术交流社区
标题: 求解 [打印本页]
作者: 郑亚鸽 时间: 2014-4-26 23:53
标题: 求解
本帖最后由 郑亚鸽 于 2014-4-27 12:53 编辑
typedef struct{
int year;
int month;
int day;
}Date;
#import<Foundation/Foundation.h>
@interface Student:NSObject
{ @public
Date birthday;
double weight; }
- (void)eat;
- (void)run;
@end
@implementation Student
- (void)eat
{ weight += 1;
NSLog(@"吃完这次后的体重是%f",weight);
}
- (void)run
{ weight -= 1;
NSLog(@"跑完这次后的体重是%f",weight); } int main()
{ Student *s = [Student new];
s->weight = 50;
// s->birthday = {2011,9,10};写法错误 Date d = {2011,9,10}; //定义结构体变量的同时赋值
[s eat];
[s run];
return 0; }
在main函数中给birthday赋值为什么不能用 s->birthday = {2011,9,10};只能用Date d = {2011,9,10};
不理解 ???
作者: gaoxinglei123 时间: 2014-4-27 00:10
这个是结构体的初始化。和一维数组初始化是一样的。只能在声明时初始化才能用int a[]={1,2,3}这种形式。而int a[3];a={1,2,3};是错误的写法
作者: 执着的土豆 时间: 2014-4-27 00:48
本帖最后由 执着的土豆 于 2014-4-27 00:57 编辑
答案在主函数的备注里面,自己看一下,不明白请追问。我觉得写的还是挺详细的。 //s->birthday = {2011,9,10}; //为什么不能赋值呢?这个不只是在oc中不可以,在c中也不可以。这行代码中在c里面解释为如下面这行代码,看着会不会很别扭?
//Data={2011,9,10};
//给你举个例子可能会明白点:定义一个整形变量,值为5.你会不会写 int=5?? 你试试写int=5,编译器会报什么错误?是不是跟这个一样的错误?你总要给个类型的接收者啊。
//int a=5;这句代码是不是可以拆分为 int a;a=5;先定义一个整形的变量a,再将5赋给a, 那么下面这句也是一样的道理。
//Date d={2011,9,10};//定义结构体变量的同时赋值 [你都知道这是定义一个结构体变量了,而上面的代码你就没有定义一个结构题的变量,你只是指向那个结构体的类型就要给人家赋值,都没有给人家定义一个变量]
- typedef struct{
-
- int year;
-
- int month;
-
- int day;
-
- }Date;
- #import<Foundation/Foundation.h>
- @interface Student:NSObject
- {
- @public
- Date birthday;
- double weight;
- }
- - (void)eat;
- - (void)run;
- @end
- @implementation Student
- - (void)eat
- { weight += 1;
- NSLog(@"吃完这次后的体重是%f",weight);
- }
- - (void)run
- { weight -= 1;
- NSLog(@"跑完这次后的体重是%f",weight);
- }
- @end
- int main()
- {
- Student *s = [Student new];
- s->weight = 50;
- //s->birthday = {2011,9,10}; //为什么不能赋值呢?这个不只是在oc中不可以,在c中也不可以。这行代码中在c里面解释为如下面这行代码,看着会不会很别扭?
- //Data={2011,9,10};
- //给你举个例子可能会明白点:定义一个整形变量,值为5.你会不会写 int=5?? 你试试写int=5,编译器会报什么错误?是不是跟这个一样的错误?你总要给个类型的接收者啊。
-
-
- //int a=5;这句代码是不是可以拆分为 int a;a=5; 那么下面这句也是一样的道理。
- //Date d={2011,9,10};//定义结构体变量的同时赋值 [你都知道这是定义一个结构体变量了,而上面的代码你就没有定义一个结构题的变量,你只是指向那个结构体的类型就要给人家赋值,都没有给人家定义一个变量]
- //s->birthday=d;
- s->birthday.year=10;
- NSLog(@"%d,%d,%d",s->birthday.year,s->birthday.month,s->birthday.day);
- [s eat];
- [s run];
- return 0;
- }
- /*
- 在main函数中给birthday赋值为什么不能用 s->birthday = {2011,9,10};只能用Date d = {2011,9,10};
- 不理解 ???
- */
复制代码
作者: Er01c 时间: 2014-4-27 01:27
1、结构体的初始化
定义的同时整体赋初值
如果定义之后,则只能单个成员赋初值
2、如何取出结构体变量中的每一个成员
A)结构体变量名.成员名
B)指针变量名->成员名 (更常用)
指针变量名->成员名 在计算机内部被转化成 (*指针变量名).成员名的方式执行
作者: 郑亚鸽 时间: 2014-4-27 12:53
明白了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |