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 可以很好的保证某些变量被人为的修改!
希望本文对你有所帮助! |