全部博文(16)
分类: C/C++
2010-11-02 11:06:27
最近一直在阅读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 可以很好的保证某些变量被人为的修改!
希望本文对你有所帮助!
chinaunix网友2010-11-02 17:27:35
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com