Chinaunix首页 | 论坛 | 博客
  • 博客访问: 98233
  • 博文数量: 16
  • 博客积分: 1113
  • 博客等级: 少尉
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-31 13:36
文章分类

全部博文(16)

文章存档

2011年(4)

2010年(12)

分类: 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 可以很好的保证某些变量被人为的修改!

 

希望本文对你有所帮助!

阅读(2297) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-02 17:27:35

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com