C语言——指针总结
在创建指针时,我们首先要做的是先初始化它,没有初始化的指针是很危险的,因为指针可以指向一个地址后直接改变它的值,所以为了避免我们的指针在创建后指向一个危险区域(即可能指向系统文件等),我们会先给它一个空值( NULL 或者 ^ ),这就是初始化指针。
int *p = NULL; //定义一个指针,并将它初始化(指向 空 )
因为 NULL 是一个不指向任何内存位置的值,所以不用担心意外覆盖内存,不用担心意外改变某些值。如果不初始化,在使用指针储存一个值的时候,谁也不知道会覆盖什么内容。
我们来看一下指针的应用:
int a ; // 定义一个变量
p = & a ; // 这里指针 p 指向(储存)的是变量 a 的地址(& 是寻址运算符,作用是访问 a 的地址)
*p = a ; // 这里指针 p 指向(储存)的是变量 a 的值 (* 是间接运算符,作用是访问 a 的值)
我们使用指针,可以直接找到一个地址,然后改变它的值,看以下代码:
int *p = NULL ; // 定义一个指针,并将它初始化(指向 空 )
int n = 0 ; // 定义一个变量 n ,它的值为 0
p = &n ; // 指针 p 指向 n 的地址,此时 p 的值已经是 n 值 0 了
*p = 2 ; // 修改指针的值,这时也就通过指针间接修改了 n 的值
这时 n 的值已经由 0 变成 2 了0这就是通过指针间接修改了 n 的值,这也是我们喜欢用指针的原因,因为它灵活,方便,只要知道地址,我们就可以精确地找到我们要找的,并修改它;
为了让大家更理解,我们再在前面的代码后面加上两行:
++ *p ; // 自加
现在 n 的值已经变成 3 了,在上面的一行代码中,指针 p 自加了 1 ,值由 2 变成了 3 ,于是 n 的值也变成了 3 ;
指针还有一个让人容易迷糊的地方就是 指向指针的指针,其实只要理解了指针,指向指针的指针也很容易理解;
int **p1 = &p ; // 定义了一个指向指针的指针 **p1 ,并让它指向了 指针p;
此时, p1 指向(储存)的是指针 p 的地址,p1 指向(储存)的是指针 p 的值;所以此时 p1 的值是 p 的值 3 ;
此时若改变 p1 的值,那么根据指针的规则, 指针 p 的值会随之改变,而因为 p 是指向 n 的指针,所以 n 的值也会改变,这是一个传递的过程。

浙公网安备 33010602011771号