const 进行一下详细的分析

来源:互联网 发布:mac 蓝牙 鼠标 编辑:程序博客网 时间:2024/06/05 13:31

最近一直在阅读Linux内核源代码,发现const用处很多,不禁感叹Linux内核代码真是把C语言应用的淋漓尽致!今天就专门对

 

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

 

希望本文对你有所帮助!

原创粉丝点击