指针就是地址,地址就是内存编号,指针变量就是存放这种编号的变量
①上代码
#includeint main() { int m=5,*p,**q,***r;//定义指针变量时 * 为类型说明符 p=&m; //p指针就是 变量m 的地址, &为取地址符 q=&p; //q指针 就是 变量p 的地址 r=&q; //r指针 就是 变量 q 的地址 printf("%dn",p); printf("%dn",*p); //非定义语句中 * 为指向运算,指向该内存里面的数据 printf("%dn",q); printf("%dn",*q); printf("%dn",**q); printf("%dn",r); printf("%dn",*r); printf("%dn",**r); printf("%dn",***r); }
②输出结果
③形象理解
示例
#includeint main() { int a=1,b=2,*p; p=&a; printf("内存编号第一次为:%dn",p); //内存编号第一次为:6487572 p=&b; printf("内存编号第二次为:%dn",p); //内存编号第二次为:6487568 printf("*p=%dn",*p); //*p=2 *p=5; //间接引用指针常量可以修改内存中的数据 printf("b=%d,*p=%dn",b,*p); //b=5,*p=5 }
示例说明指针即内存编号是会变的,且内容也会变
指针常量int * const p = &a;//声明时必须初始化
①上代码
#includeint main() { int a=1,b=2; int * const p=&a; printf("*p=%dn",*p); //*p=1 *p=10; //间接引用指针常量可以修改内存中的数据 printf("a=%d,*p=%dn",a,*p); //a=10,*p=10 //若添加 p=&b; 则是错误的写法,指针常量不可以指向其他变量,编号不能变了 }
②通俗点理解
int * const p=&a; 声明的同时初始化,第一次去宾馆确定房间号
*p=10; 间接引用指针常量可以修改内存中的数据 每次去房间里的人不一样
p=&b; 错误-->坚决不换房间
常量指针总结:流水的女朋友,铁打的房间号
const int * p; int const * p; //两种声明方法,不必初始化
①上代码
#includeint main() { int a=1,b=2; int const *p; p=&a; printf("*p=%dn",*p);//*p=1 p=&b; printf("*p=%dn",*p); //*p2 *p=5; //非法,间接引用指针常量不可以修改内存中的数据 }
②通俗理解
p=&a; p=&b; 想去哪一个房间都可以
*p=5; 房间里面的人不能换
结语: 指针常量 -> 指针为常量,不可改变指向,但可修改指向的值。 常量指针 -> 常量的指针,可改变指向,不可修改指向的值。总结:皇帝翻牌,去哪无所谓,牌子上的人不会变



