- const修饰变量(非指针),使变量常量化,也就是使变量不能够被修改
eg:const int a = 10; int const a=10;此时a只能是10,不能被改变了。如果没有用const修饰,a可以被赋值,比如a=20; - const修饰指针变量,会使指针变量常量化,但是要注意const的位置
1.const int *p 此时const修饰的是指针指向的内容,限制通过指针去改变指向的内容,但是内容本身可以修改,只是不能通过指针修改。指针的指向也是可以改变。eg:
#include <stdio.h>
//#define _DEBUG_
int main(int argc, char const *argv[])
{
int m=100,n=200;
const int *p;
p=&m;
printf("1) %d %p %d %p\n", m,&m,*p,p);
m++;
printf("2) %d %p %d %p\n", m,&m,*p,p);
p=&n;
printf("3) %d %p %d %p\n", m,&m,*p,p);
#ifdef _DEBUG_
*p = n;
printf("4) %d %p %d %p\n", m,&m,*p,p);
#endif // _DEBUG_
return 0;
}
上述的示例,可以总结出此种const用法**不能通过指针修改指向的内容!**仅此而已,另外包含的知识点:调试的时候宏定义调试要顶头,可以在头文件中定义调试宏,也可以通过编译的时候直接连接。通过参数-D 《连接的宏名字》
2.常量化指针指向的对象
int *const p;此时指针修改指针变量p,该情况下指针指向不能改变,其余的都可以改变。也就是指针的地址不能改。
#include <stdio.h>
//#define _DEBUG_
int main(int argc, char const *argv[])
{
int m=100,n=200;
int *const p=&m;
printf("1) %d %p %d %p\n", m,&m,*p,p);
m++;
printf("2) %d %p %d %p\n", m,&m,*p,p);
#ifdef _DEBUG_
p=&n;
printf("3) %d %p %d %p\n", m,&m,*p,p);
#endif // _DEBUG_
*p = n;
printf("4) %d %p %d %p\n", m,&m,*p,p);
return 0;
}
3.常量化指针变量以及目标
const int *const p;