一、问题
如何初始化指针?只有初始化的指针才可以使⽤,这个与普通变量没有区别。
二、解答
定义指针变量之后,必须为其赋具体的值,⽽且指针变量的赋值只能赋予地址,绝对不可以是其他数据,并且要注意数据类型的⼀致。
下⾯来看⼀个问题程序。 这个程序主要是实现对数据之间使⽤指针进⾏传递,代码如下。
#include <stdio.h>
int main()
{int i = 10, j;float *p;p = &i;j = *p;printf("i = %d, j = %d\n", i, j);return 0;
}
此程序的运⾏结果如下所示。
i = 10, j = 0
通过运⾏结果可以看出,这并不是程序设计之初的结果。为什么会这样呢?
在程序中定义 int 类型变量 i 和 j ,并给变量 i 赋初值10,在下⼀⾏定义了⼀个类型为 float 的指针变量 *p ,将 int 类型变量i的地址赋值给 float 型的指针变量 *p 。然后使⽤间接寻址运算符( * )从指针变量 p 所指向的内存地址中的值进⾏读取,并将读取的值赋给 j ,也就是最终设想将 i 的值赋给 j 。
可是,结果却不是当初设想的那样。因为P指针变量是⼀个 float 类型的指针变量,编译器认为其指向的内存地址保存的是 float 类型数据,进⽽按照 float 型数据的格式从内存中读取数据,然后赋给 j ,所以读出的并不是 int 类型的 i 。 通过上⾯的问题解析就不难修正问题程序了,只要将“ float *p; ”这⼀句代码修改为“ int *p; ”就可以了。
三、总结
如果对末初始化的指针进⾏操作,可能导致系统混乱,甚⾄导致系统的崩溃,为什么会这样呢?因为刚定义的指针变量中可能有⼀个随机的值。在指针变量中,该值表示的是 ⼀个内存地址。如果该地址正好是操作系统的代码区域,修改该内存中的值就会导致系统崩溃。