const指针
把 非const指针赋给const指针没问题,前提是 只进行一级解引用
这句话的意思是说:
int *p1; const int *p2; p2 = p1;
是被允许的。
但是,
const int **pp2; int *p1; *p2 = &p1;
是不被允许的。
const int **pp2;
int *p1;
pp2 = &p1;
报错提示:
16 6 D:\File\pra2.cpp [Error] invalid conversion from ‘int**’ to ‘const int**’ [-fpermissive]
意思是:二级int型指针赋值给const型int型二级指针是无效的转化
二级指针引用
这里增加一点关于 二级指针引用的内容。
#include<stdio.h>
int main(){
int *p1;
int **pp2=&p1; //将p1的地址赋值给二级指针pp2,也就是pp2指向了p1
int n = 13;
printf("%d ",n); //n的初始值为13
*pp2 = &n; //将变量n的地址赋值给pp2的值,即p1指向n 等价于=> p1 = &n;
printf("%d ",n); //n的值此时还没变 还是13
*p1 = 10; //将10赋值给p1,即p1所指向的n被赋值为10
printf("%d ",n); //输出n当前值,为10
}
总结指针二级引用:
- 二级指针pp2的值是其所指向的一级指针p1的地址;
- 将二级指针pp2的值修改为变量x,则是将变量x的地址赋给pp2的值,也就是将变量x的地址赋给p1,即p1的值为x的地址;
- 对p1的值进行修改,也就是对内存中,变量x的地址中,所存的的值进行修改,所以会修改掉x的值。