C 语言 const 分析
时间:2010-11-02 来源:zd零
| 最近一直在阅读Linux 内核源代码,发现const 用处很多,不禁感叹Linux 内核代码真是把C语言应用的淋漓尽致!今天就专门对const 进行一下详细的分析! 
 const的作用就不说了,地球人都知道! (一) 直接看代码: 
 int a=10; a=9; 
 以上两句史上最简单的代码肯定编译通过!再看…… 
 const int a 10; a=9; 
 再次编译就通不过了吧!因为变量a已经限定为const 常量,不能改变a的值! 
 注意: 在声明一个const 变量时可以为他赋初值! const int a; a=10; 此时编译再次报错,不能对一个只读变量赋值!此时若输出a 的值为一个随机值,因为变量a 在栈中!不信你看: const.c int main(void) { const int a=10; } gcc –S const.c 
 vim const.s 
 .file "const.c" .text .globl main .type main, @function main: leal 4(%esp), %ecx andl $-16, %esp pushl -4(%ecx) pushl %ebp movl %esp, %ebp pushl %ecx subl $16, %esp movl $10, -8(%ebp) addl $16, %esp popl %ecx popl %ebp leal -4(%ecx), %esp ret .size main, .-main .ident "GCC: (GNU) 4.1.2 20080704 (Red Hat 4.1.2-48)" .section .note.GNU-stack,"",@progbits 
 注意红色字体的两行,at&t 的汇编代码 不用解释了吧。。。。。。 
 
 
 (二) const 在内核代码中几乎全部用在了指针变量上!让我们继续分析! 1) int a=10; const int *p=&a; *p=9; 
 编译报错!指针p指向的变量为只读变量!此处同样不能用 a=1 改变a的值! 注意:指针p的值是可以改变的! 例如: int a=10; int b=9; int *p=&a; p=&b; 
 编译运行成功! 
 
 2) int a=10; int b=9; int * const p=&a; p=&b; 
 编译失败!const 限置 指针变量p 为只读变量,所以同样不能改变它的值! 
 
 总结一下: C 中 const 用法很巧妙,运用const 可以很好的保证某些变量被人为的修改! 
 希望本文对你有所帮助! | 










