黑马程序员技术交流社区

标题: c语言中的结构体中成员怎么不能直接初始化 [打印本页]

作者: 饶世红    时间: 2014-12-19 09:24
标题: c语言中的结构体中成员怎么不能直接初始化
如:
struct Person{
char *name ="itcast";
int age=20;
};

为什么这里的name和age不能像类成员变量那样直接初始化

作者: 从今以后    时间: 2014-12-19 10:42
这只是个变量类型,就像int,char,int [],里面只是告知了成员都是啥类型,必须定义变量才能初始化,初始化的是变量, 不是类型。
struct Person{
char *name;
int age;
};
struct Person Jack = {"Jack", 20};
Jack才是定义出来的变量,可以初始化
作者: 邓明    时间: 2014-12-19 11:22
楼上说得对,struct结构体只是一个模版,你都把模版赋值了
那所有根据模版定义的结构体变量就是一个样子,这样结构体的意义也就失去了
这个跟类差不多,但是类也是没法直接就在里面赋初值的啊,你再确认下?
作者: 邹志鹏    时间: 2014-12-19 12:15
沙发正解,结构体就是一种数据类型,你有见过直接用int 赋值的嘛?
比如说:int 10;
这样肯定不行啊,这是啥玩意,所以说同样的道理,把它想象成int就很好理解了
作者: 饶世红    时间: 2014-12-19 12:49
从今以后 发表于 2014-12-19 10:42
这只是个变量类型,就像int,char,int [],里面只是告知了成员都是啥类型,必须定义变量才能初始化,初始 ...


class  Person{
String  name="itcast";
int  age=20;
}

Person p = new Person();


struct  Person{
char *name="itcast";
int age=20;
};
struct Person p;
这两个有什么区别,都是定义一个类型
作者: 墓笙    时间: 2014-12-19 13:06
erlou shuode  dui !!!!!!!!!!!!!!
作者: 邓明    时间: 2014-12-19 13:17
饶世红 发表于 2014-12-19 12:49

class  Person{
String  name="itcast";

你举例的类是C#类吧?结构体是C结构体吧?
拜托这两个千万不要搞到一起,没有可比性的
另外不要在类或者结构体里面赋值
C#可能不会报错,但是你这么写就是错误的写法,没有直接赋初值的!
作者: 饶世红    时间: 2014-12-25 15:15
结构体只能是在声明定义结构体变量的同时给结构体成员初始化,如struct Person p ={"itcast",20}
作者: 枫叶路过123    时间: 2014-12-25 15:34
   初始化是结构体变量 ,定义的是结构体类型
作者: xiezhongmin    时间: 2015-1-5 13:02
你去看看头文件,定义类型的时候有没有初始化不就知道了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2