黑马程序员技术交流社区

标题: 关于变量初始化的问题,求大神解答??? [打印本页]

作者: 张晓珊    时间: 2015-5-26 14:55
标题: 关于变量初始化的问题,求大神解答???
在学习基础视频的过程中,老师一再强调,变量定义后一定要初始化之后在使用,但是有的具体该怎么初始化一直很不清楚。比如int 变量,如果不初始化就是随机的一个数值,但是如果是全局变量的话就默认是0,还有哪些变量默认是0的,求解答!!!

作者: Dariel    时间: 2015-5-26 15:03
我觉得最好的习惯就是变量都初始化下,这个肯定错不了。当定义一个变量后就相当于定义一个指针,指到了刚内存为该变量分配的空间,这个空间里面本来可能有数据,初始化的作用就是删除这个数据!
嗯,就酱紫!欢迎交流{:3_57:}
作者: 学习专用    时间: 2015-5-26 15:25
你好,我也刚学完这里,说说我的理解吧。1,定义的同时初始化: int a = 1;  不管以前是什么值,现在已经初始化了,
作者: 学习专用    时间: 2015-5-26 15:28
部分初始化指的是 int a = 1 , b ;  a 已经初始化了,但b没有初始化呢。
先定义后初始化   int a ;  先定义了a,但是没有指定值, 后边a = 1 就是已经初始化了。。  不知道我说的对吗??
                            a = 1
作者: yuang4074    时间: 2015-5-26 16:11
你的担心是多余,建议定义后初始化为0;至于随机数值这个因编译器不同,而默认值也不同。
作者: 张晓珊    时间: 2015-5-26 16:21
yuang4074 发表于 2015-5-26 16:11
你的担心是多余,建议定义后初始化为0;至于随机数值这个因编译器不同,而默认值也不同。 ...

基本数据类型可以直接初始化为0,如果碰上数组,结构体或者指针这类复杂数据类型该怎么初始化呢?
作者: 张晓珊    时间: 2015-5-26 16:22
学习专用 发表于 2015-5-26 15:28
部分初始化指的是 int a = 1 , b ;  a 已经初始化了,但b没有初始化呢。
先定义后初始化   int a ;  先定 ...

完全正确。其实基本类型的初始化简单,主要是数组,结构体这类的复杂类型初始化有点不清楚。
作者: yuang4074    时间: 2015-5-26 16:24
数组:如int a[100]={0};//这样就全部初始化为了0
结构体:如 Student s;s->age=0;s->sex=0;s->score=0;//拿出来按照类型不同一一初始化
指针:如 int *p=null;//初始化为空
作者: 张晓珊    时间: 2015-5-26 16:26
Dariel 发表于 2015-5-26 15:03
我觉得最好的习惯就是变量都初始化下,这个肯定错不了。当定义一个变量后就相当于定义一个指针,指到了刚内 ...

哎呦!不错哦。很清新脱俗的想法,豁然开朗啊。但是基本类型容易初始化,数组结构体指针之类的复杂数据类型该怎么办呢?例如指针,int *p = 0,这样的写法对吗?
作者: 张晓珊    时间: 2015-5-26 16:27
yuang4074 发表于 2015-5-26 16:24
数组:如int a[100]={0};//这样就全部初始化为了0
结构体:如 Student s;s->age=0;s->sex=0;s->score=0;// ...

受教了,谢谢!
作者: 张晓珊    时间: 2015-5-26 16:28
yuang4074 发表于 2015-5-26 16:24
数组:如int a[100]={0};//这样就全部初始化为了0
结构体:如 Student s;s->age=0;s->sex=0;s->score=0;// ...

才发现,你也喜欢火影吗????
作者: 张晓珊    时间: 2015-5-26 16:30
yuang4074 发表于 2015-5-26 16:24
数组:如int a[100]={0};//这样就全部初始化为了0
结构体:如 Student s;s->age=0;s->sex=0;s->score=0;// ...

才发现,你也喜欢火影吗????
作者: Dariel    时间: 2015-5-26 19:32
张晓珊 发表于 2015-5-26 16:26
哎呦!不错哦。很清新脱俗的想法,豁然开朗啊。但是基本类型容易初始化,数组结构体指针之类的复杂数据类 ...

对于数组来说,int a[5]={1,2,3};这是不完全初始化,未被初始化的自动归零,就等价于int a[5]={1,2,3,0,0};或者不初始化,int a[5];里面的都是垃圾值,或者全部清零int a[5]={0};最后这种方法最好用了。

对于结构体来说,定义的时候可以整体赋值,定义之后只能单独赋值,考虑到结构体的使用场景,应该都是先赋值再应用。

对于指针,int *p = 0,这个不对。可以这样看 int* p  意思是p是一个只能存放整型地址的数据类型,所以说p中存放的一定是一个内存中的地址,而且这个地址所存放的数据是整型。
例如:
int p =10;
int *q=&p;//q是int*类型,q只能存放int类型变量的地址
int **i=&q;//i是int**类型,i只能存放int *类型变量的地址
以此类推,再多*都不怕{:3_53:}

嗯,估计我们会是一届啊
作者: 张晓珊    时间: 2015-5-26 19:44
Dariel 发表于 2015-5-26 19:32
对于数组来说,int a[5]={1,2,3};这是不完全初始化,未被初始化的自动归零,就等价于int a[5]={1,2,3,0,0 ...

谢谢啦。我正在进行报名流程,你呢?
作者: 天是蓝色的    时间: 2015-5-26 21:09
前来看学习
作者: hi虚无缥缈    时间: 2015-5-26 21:14
定义局部变量时,不初始化默认值是随机的;而全局变量不初始化默认值是0.
作者: 李双良    时间: 2015-5-26 22:03
好好在看一边视频~
作者: yi95392    时间: 2015-5-26 23:18
楼上大神们说的好详细啊
作者: lyricdon    时间: 2015-5-26 23:35
在OC 中 ,所有变量都自动初始化为0,
作者: 七尺阳光    时间: 2015-5-27 00:07
纠结这个貌似没有意义.记得用就要初始化什么都解决了
作者: hui1107464497    时间: 2015-5-27 00:11
围观了一下




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