1、const修饰的为常量,不可以直接修改,但是可以通过指针修改
#include "stdio.h"
#include <stdlib.h>
int main()
{
//1、const
const int a = 10;
//a = 100;//err 左值不可修改,const修饰的为常量,不可以直接修改,但是可以通过指针修改
int* p = &a;
*p = 100;
printf("a:%d\n",a);a:100
system("pause");
return 0;
}
2、const修饰的是*(const int * p),即const修饰的是解引用*p,所以*p的身的值不能被修改(即*p的指向变量值不能被修改),但是p本身可以被修改(p本身保存的是&a)
ps:const int * p代表 *p禁止了直接修改变量的值(即如果p指向const int a 的话,a的值即不可以直接修改也不可以通过指针*p进行修改),相对与const int p比较,但是可以通过 p = &b修改p的指向,但是此时已经不再指向a了
#include "stdio.h"
#include <stdlib.h>
int main()
{
int a = 10;
int b = 20;
const int* p = &a;//const修饰的是*,即const修饰的是解引用*p,所以*p本身的值不能被修改
//*p = 100 //err *p的值为10,p的值为&a,下图
p = &b;// 合法,可以修改指针本身变量的值,即p的内容可以修改,即p的指向可以修改
printf("*p:%d\n",*p);//*p:20
system("pause");
return 0;
}
3、const修饰的是变量p(int* const p),代表p的内容不能修改,但是*p指向的内容可以修改
ps:int* const p代表p会一直指向a变量
#include "stdio.h"
#include <stdlib.h>
int main()
{
int a = 10;
int b = 20;
int* const p2 = &a;//const修饰的是变量p,代表p的内容不能修改,但是*p指向的内容可以修改
*p2 = 100;
//p2 = &b;//err 表达式必须是可修改的左值
printf("*p2:%d\n", *p2);//*p2:100
system("pause");
return 0;
}
4、const int * const p = &a 不能修改p的内容也不能通过*p修改p的指向的内容(结合使用)