C语言指针的初始化!!!!

Python012

C语言指针的初始化!!!!,第1张

例如 int *pt 然后 *pt=5 这样说是不能对未初始化指针取值!!还有 如果有指针 char* i不初始化直接用 *i="Hello"可以吗?

int *pt/* pt是一个指向整数的指针,未初始化时,存储该指针的地址&pt是随机的,可以用printf("%p",pt)来验证。 就是说,该指针可能指向任意地方,包括系统使用的内存区,虽说这不是你需要的。当*pt = 5时,就有 可能造成无法预料的结果。*/你可以在定义指针的时候直接初始化,语句如下int *pt = 5同样,也可以这样这样写:char *i = "Hello"

char 指针,也就是char *类型。 其初始化本质上与其它变量初始化没有什么区别,就是赋予其一个初始化的值。

对于指针来说,在C语言中,就是一个地址。区分初始化情况,有四种表象:

1 初始化为空。即

char * str = NULL

的形式,NULL在C语言中是特定的空指针,其值为0.在C语言中,以NULL作为指针的一个未生效状态,其本身是一个非法的地址值。

2 初始化为常量字符串地址。

char * str = "test"

常量字符串在运行时会被放在常量空间中,于是这样初始化后,地址是常量空间中的一个地址,对于该地址只能读取,不可写入。即str的值可以改,但是str指向的值是不可修改的。

3 初始化为变量地址。

这里的变量地址,包括全局变量,局部变量的地址,以及通过动态分配申请到的内存地址。

这种情况下,对指针指向的空间是可以修改的。

4 不做初始化。

这种情况在C语言中是允许的。如果为全局变量或静态局部变量,系统默认初始化为0值,即NULL。而对于局部变量,将是一个随机值。所以如果是局部变量不做初始化,在取其指向空间值前,必须为其指定一个合法的值,否则访问会出错。