文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>C 语言 const 分析

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

 

希望本文对你有所帮助!

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载