const在C语言中的用法

来源:互联网 发布:监控网络设置方法 编辑:程序博客网 时间:2024/06/04 23:24
const作用:防止定义的变量被修改
1、用于修饰变量
const int a=10;//合法
int const b=10;/合法,等价const int =10;
const int c;//非法
int const d;//非法
注意:必须有初始值


2、用于修饰指针
const修饰的*sp,所以sp指针指向的地址可以改变,但是*sp执行的内容不可改变
第一:const int *sp//指针可变,指向内容不可变
      int const *sp//指针可变,指向内容不可变


    int temp=10;
    int temp2=70;
    const int *sp=&temp;//


    sp=&temp2;//合法,修改指针
    *sp=300;//非法,如果定义指针用int *sp=&temp;方式则合法


const修饰的*sp,所以sp指针指向的地址可以改变,但是*sp执行的内容不可改变
第二种:int *const sp//指针不可变,指向的内容可变
例如:
    int temp=10;
    int temp2=70;
    int  *const sp=&temp;


  // sp=&temp2;//不合法,指针不可变,指向内容可以改变
    *sp=300;//合法,
    printf("*p=%d",temp);//结果为300


第四种:
const int *const sp//sonst即指针不可变、指向的变量也不可改变
3、修饰函数形参
void func(const int &num)//防止按地址传入的原始数据被修改
{
    num=100;//错误,不能修改
}
补充:既然怕修改为啥不直接使用按变量方式传递
答:按变量的方式传递浪费内存和时间,效率不高,失去了按地址传递的意义


4、修饰函数返回值
例如:const int func();
则接受的值也需要使用const 限定
const int a=func();//正确
int a=func();//错误


5. 可以避免不必要的内存分配 
  #define STRING "abcdefghijklmn\n" 
  const char string[]="abcdefghijklm\n"; 
  ... 
  printf(STRING);  //为STRING分配了第一次内存 
  printf(string);  //为string一次分配了内存,以后不再分配 
  ... 
  printf(STRING);  //为STRING分配了第二次内存 
  printf(string); 
  ... 
  由于const定义常量从汇编的角度来看,只是给出了对应的内存地址, 
  而不是象#define一样给出的是立即数,所以,const定义的常量在 
  程序运行过程中只有一份拷贝,而#define定义的常量在内存中有 
  若干个拷贝。 
0 0
原创粉丝点击