c指针与常量(完)
内容概要
一、指向常量的指针
二、常量指针
1、指向常量的指针
-通过指针对变量进行修改
#include <stdio.h> int main(){ int a = 100; int *p = &a; printf("%d\n", *p); *p = 1000; printf("*p: %d a: %d\n", *p, a); return 0; }
-尝试通过指针来修改常量
#include <stdio.h> int main(){ const int a = 100; int *p = &a; // 这里会报错[Error] invalid conversion from 'const int*' to 'int*' [-fpermissive](我的理解是指针类型和指向的“变量类型”不同) printf("%d\n", *p); *p = 1000; printf("*p: %d a: %d\n", *p, a); return 0; }
#include <stdio.h> int main(){ const int a = 100; const int *p = &a; //在int前加入const解决类型不一致问题 printf("%d\n", *p); *p = 1000; //这里会报错,尝试通过指针对一个只读变量进行修改操作 printf("*p: %d a: %d\n", *p, a); return 0; }
-虽然指针变量p不能通过解引用的方式修改对应常量的值,但是它可以修改指向的对象,存储不同指针
#include <stdio.h> int main(){ const int a = 100; int b = 200; const int *p = &a; printf("%d\n",*p); p = &b; //将指针指向b printf("%d\n",*p); return 0; }
#include <stdio.h> int main(){ const int a = 100; int b = 200; const int *p = &a; printf("%d\n",*p); p = &b; printf("%d\n",*p); *p = 2000; // 虽然指向了一个变量,而非常量,但依旧无法对修改值 printf("%d\n",*p) return 0; }
将一个const int 指针指向一个没有const修饰的 int类型,并不能起到完全保护数据的作用(只是阻止了通过指针的方式修改变量),可以通过变量本身就行修改
#include <stdio.h> int main(){ const int a = 100; int b = 200; const int *p = &a; printf("%d\n",*p); p = &b; printf("%d\n",*p); b = 2000; // b被改了 printf("%d\n",*p) return 0; }
2、常量指针
如果要使得指针变量存储的指针保持不变,那么就要使用常量指针(现在它是一个彻底的常量了)
#include <stdio.h> int main(){ const int a = 100, b = 200; const int * const p = &a; //理解为(const int *)为数据类型;(const p)定义了一个常量 printf("%d\n",*p); p = &b; // 这里报错了,不允许改变存储的指针[Error] assignment of read-only variable 'p' printf("%d\n",*p); return 0; }
***完***
本文来自博客园,作者:口乞厂几,转载请注明原文链接:https://www.cnblogs.com/laijianwei/p/14529145.html

浙公网安备 33010602011771号