最近刚刚学到指针这部分内容,就尝试着自己写一些代码,不过,总是会出现这样或者那样的 error 或者 warning , 其中,比较普遍的是:当你写下类似下面的代码时,我使用的编译器 Codeblocks 就会报错:
int *p;
*p = 7;
具体的报错的内容如下:
就是说:你定义的指针没有进行初始化!
开始,我还以为这没什么大不了的,但是,当错误的出现多了之后,我去网上找了一些资料,发现这种指针没有初始化就进行赋值的行为是十分危险的!具体解释如下:
*p = 7 这个语句就是将 7 赋给 p 指向的内存区,但是,问题是 p 指向的内存区是未知的,有可能是任何地方,甚至是系统内核。随意对这些区域进行赋值操作是十分危险的!
所以,正确的做法是:一定义就初始化!
int i;
int *p = &i;
*p = 7;
这样,就不会报错了!
同时,需要说明的是,在定义中 int *p 中的 *p 不是指对指针的间接读取,而是说明该变量是一个指针变量而已!

被折叠的 条评论
为什么被折叠?



