最初,我是从Java开始上手编程的,我记得在学Java的时候,对于一个声明的变量,如果没有指定初始化的值,那么会得到一个默认的初始化值,比如int默认初始化是0,如果不是基本类型,初始化的值就是null.虽然我在一些书上看到了对初始化代码的建议,比如显示地指定null的初始化值,但对这个建议始终没那么上心,因为由于Java的默认初始化值的策略,使我以前在写Java的时候,就算没有显示的指定null的初始化值,也没有出过什么问题,但是在c语言中,我发现这个会引发很严重的问题.
尤其是在指针的使用中。
我有时会使用这样的代码:
void *p;
if(xx){
p = xxoo;
}
if(p!=NULL){
xxooxx;
}
在c中,当你声明一个指针的时候,如果没有显示指定是NULL,那么它有可能是任何不确定的值。而且我现在对null,NULL,和nil的有了更本质上的认识。在c的标准库头文件中可以看到NULL的定义.
指针的初始化 今天学习指针的时候,指针初始化让我晕了很久。主要还是由于把指针的声明以及间接寻址运算符*混为一谈。
间接运算符的作用是,如果 p 是一个指针,那么 *p 就是p所指向的对象的值。所以我总把指针申明初始化的时候,比如 int *i = xx;理解为 int *i; *i = xx; 但实际上,在指针声明中的并不是间接寻址运算符(目前我的理解是这样的,这样才解释得通), 所以其实,这个初始化过程应该是 int *i; i=xx 。
char *cp = “hello” 则是把 cp 指向字符串的第一个字符地址.