C语言const关键字的四种用法
2016-11-13 22:19
471 查看
博客: http://www.cnblogs.com/zhangfeionline/p/5882790.html
#include <stdio.h> /* gcc中,const是通过编译器在编译的时候执行检查来确保实现的(也就是 说const类型的变量不能改是编译错误,不是运行时错误。)所以我们只要想办法骗过编译器, 就可以修改const定义的常量,而运行时不会报错。 */ int main(int argc, char const *argv[]) { /* const int a; / int const a; 有一样的意思 如果我们给出 const int a;你应该知道这是将a常量化了,但是为什么那? 那是因为int 和const 都作为一个类型限定词,有相同的地位。 所以你也可以写成 int const a;似乎这样更加好理解!当然这都不难, 难点在哪里哪?当然此时你如果定义指针也是可以修改的,但是会报警告! 当然强制类型转换后警告也不会报了! 所以 const int a=10; 是申明了一个只可读的变量,如果 a=12;在编译期报错。 */ /*1、申明一个常变量*/ const int a=10; /* a =12; 变异错误,a是编译期常量 */ int b=10,c=55; /*2、 申明一个指针, 该指针指向的变量不可更改 ,相当于通过*p指针获得了原来实例的可读版本 一般用于子函数调用中形参函数,限制子函数中不能对调用放内容进行更改 如 const char* src; 或 char const *src; *p是常量。也就是说,p指向的数据是常量 const int* p int const *P; const int* p; 这是修饰了谁那?其实我们可以这样想,如果我们把int 拿出来 也就是 const int (*p); 等价于 int const (*p); 由此我们可以看出来const修饰了*p啊! 也就是指向的内容不可以改变,比如p已经指向a变量,但是*p=45;会报错,因为*p不可改变 但是地址是可以改变的。比如c=55, p=&c;是正确的 但是我们如果写为int const *p 似乎就非常好理解了。就是修饰了*p */ const int* p=&a; /* *p=45; 会报错 */ p=&c;//正确做法 //*p=445; 不可更改 c=43534;//通过原来变量名可更改,相当于通过p指针获得了c变量的可读版本 int const *ptr=&b; /* *ptr=44; *ptr 是不可更改 */ /* 3、 申明一个常指针变量 也就是说 该指针你只能赋值一次, 且只能在定义时候赋值 ; 但是指针指向的变量可以改变 int * const p; */ int* const ptr2=&b; *ptr2=3454; fprintf(stdout, "%d\n", *ptr2 ); /* 4、 const int *const p 表示p指针是一个常指针变量,同时指向的变量也是常量不可更改 */ const int *const ptr3=&c; /* ptr3=&a; 错误,ptr3 是常指针变量, 只读的 */ /* *ptr3=80; 错误,*ptr3 是常量不可更改,只读的 */ return 0; }
相关文章推荐
- 详解C语言中const关键字的用法
- C语言中const关键字的用法
- C语言中const关键字的用法大全(包含与#define的区别)
- C语言中关键字const、static、volatile的用法分析
- 详解C语言中const关键字的用法
- C语言关键字const用法
- C语言中const关键字的用法
- C语言中const关键字的用法
- C语言中const关键字的用法
- 关于C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性。
- 标准C++中const关键字的用法总结
- 关于关键字const用法的若干总结
- C语言的const关键字
- const关键字的用法
- C语言const关键字作用
- C语言中const常见用法
- [转载]情景分析“C语言的const关键字”
- C++关键字Const的用法小结
- C/C++中关键字static,const,inline,define,typedef的用法及其意义
- C的关键字——const的理解和用法