C语言,const

 

const意味着“只读”

ubunto下的实验

 

1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)

2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。

3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。

#include <stdio.h>

void main(void)

{

 int const a = 10;

 int *p = (int*)&a;

 *p = 20;

 printf("&a=%d\n", &a);

 printf(" p=%d\n", p);

 printf(" a=%d\n", a);

 printf("*p=%d\n", *p);

}

 //&a=-1081948900

 //p=-1081948900

 //a=20

 //*p=20

 

1) 修饰一般常量 一般常量是指简单类型的常量

const int a;

int const a;

2)修饰常指针                                                                                            const int *A  ,  int const *A; //const修饰指向的对象,A可变,A指向的对象不可变

int *const A;                  //const修饰指针A, A不可变,A指向的对象可变

const int *const A;            //指针A和A指向的对象都不可变

3) 修饰函数的常参数 const修饰符也可以修饰函数的传递参数,格式如下:void Fun(const int Var); 告诉编译器Var在函数体中的无法改变,从而防止了使用者的一些无意的或错误的修改。

#include <stdio.h>

int const a = 10;

void main(void)

{

 int *p = (int*)&a;

 *p = 20;

 printf("%d\n", *p);

}

//段错误

#include <stdio.h>

void main(void)

{

 int const a = 10;

 int b = 20;

 int *p = (int*)&a;

 *p = 20;

 printf("&a=%x\n", &a);

 printf("&b=%x\n", &b);

 printf(" p=%x\n", p);

 printf(" a=%d\n", a);

 printf("*p=%d\n", *p);

}

//&a=bfbc9c1c

//&b=bfbc9c18

// p=bfbc9c1c

// a=20

//*p=20

//从中可以看出a的值存在栈中。

 

 

 

你可能感兴趣的:(Const)