书上说“声明指针一定要初始化它们。使用未初始化的指针存储数据项是很危险的。在使用指针存储一个值时,谁也不知道会覆盖什么内容。”
那么这么写就很危险了是不是,没有在第一时间把指针初始化为NULL:
long num1 = 0L;
long *pnum1;
pmum1 = &num1;
那么这么写就很危险了是不是,没有在第一时间把指针初始化为NULL:
long num1 = 0L;
long *pnum1;
pmum1 = &num1;
解决方案
20
题主对那句话还没有完全理解,这里说的初始化并不是狭义上的“在定义同时赋值”这个意思
而是说不要使用指向不明的指针,一个指针对应一个内存地址,假如你定义了一个变量,然后用指针指向它,那可以保证这个指针所指空间是可以供你使用的,原因是定义的那个变量的内存是系统分配的,系统不会把不能用的内存分配给你
但是假如你直接给指针付一个值,或说干脆没有赋值,那里面就存了一个随机值,这个值对应的内存空间不一定是可用的,应该说一定是不可用的,假如这个时候你往这个内存里写或读,那就会出现读取内存异常错误,这是非常常见的一种C语言错误
这句话的意思是不要使用指向不明的指针,即野指针,而避免这种情况的一种方法是初始化指针变量
由于C语言变量定义只能放在函数起始位置,可能会出现指针还不知道指向哪儿的问题,这个时候最好将指针置为NULL,这样会避免以后误操作。
总之,为了防止指针误操作,要么将指针指向一个已定义的变量,要么将其置为NULL
最后你应该明白了,你定义的指针在下面马上赋了一个正确的值,中间并没有其他操作,所以代码是可以的,没有问题
而是说不要使用指向不明的指针,一个指针对应一个内存地址,假如你定义了一个变量,然后用指针指向它,那可以保证这个指针所指空间是可以供你使用的,原因是定义的那个变量的内存是系统分配的,系统不会把不能用的内存分配给你
但是假如你直接给指针付一个值,或说干脆没有赋值,那里面就存了一个随机值,这个值对应的内存空间不一定是可用的,应该说一定是不可用的,假如这个时候你往这个内存里写或读,那就会出现读取内存异常错误,这是非常常见的一种C语言错误
这句话的意思是不要使用指向不明的指针,即野指针,而避免这种情况的一种方法是初始化指针变量
由于C语言变量定义只能放在函数起始位置,可能会出现指针还不知道指向哪儿的问题,这个时候最好将指针置为NULL,这样会避免以后误操作。
总之,为了防止指针误操作,要么将指针指向一个已定义的变量,要么将其置为NULL
最后你应该明白了,你定义的指针在下面马上赋了一个正确的值,中间并没有其他操作,所以代码是可以的,没有问题