【扩展知识7】谈const有关的那些事

【扩展知识5】谈const有关的那些事

 

扩展目录:

1.        const修饰变量

2.        conts 修饰参数

3.        const修饰函数返回值

 

( 1 )const的目的

 const是constant的缩写,是恒定不变的意思。但在C语言中修饰的变量是只读的变量,其值在编译时不能被使用,因为编译器在编译时不知道其的存储的内容。

 

推出目的:是为了取代预编译指令,即消除预编译的缺点,同时继承它的优点。(const在C++里已替代了预编译指令的位置)

   编译器通常不为普通 cconst 只读变量分配存储空间,而是将它们保存在符号表中,这使

得它成为一个编译期间的值,没有了存储与读内存的操作,节省了空间,避免不必要的内存分配,同时提高效率

 

[程序1]:

 

//功能:测试const变量的值不可以改变和定义数组是需确定元素的个数
#include <stdio.h>
 
int main( void )
{
         constint n= 100;//cosnt修饰的是n,所以n为只读,不可以改变其值
        
    //会报错!!
   //因为定义数组时必须确定元素的个数 (即常量)
         //所以证明const修饰的n不是常量
         intarray[ n ]={ 0 }; //定义n个整形数组,并全初始化为0
        
        
         //当我们改变n的值时,编译器会报错:n为只读变量
         //n=200;
        
         return0;
}
 


[程序2]

//测试case 语句后必须为常量值
#include <stdio.h>
 
int main( void )
{
         constint n= 4;  //n不是常量,只是只读
   int num= 4;
        
 
         switch(num )
         {   //第一个case语句报错:caseexpression not constant
             //再次证明const修饰的n不是常量
                   casen:
                            {
                                     printf("n=  4\n" );
                                     break;
                            }
                   case3:
                       {
                                printf( "n=  3\n" );
                               
                                break;
                       }
                   //省略....
                   default:
                      {
                          printf( "n= 其他\n" );
                              
                               break;        
                      }
         }
        
   return 0; 
}
 


( 2 )const修饰变量

(a)    cosnt修饰一般变量

 

(b)    cosnt修饰指针变量

const int *p;        // 指针变量p可变,p指向的对象(内容)不可变
int const *p;        // 指针变量p可变,p指向的对象(内容)不可变
int * const p;        // 指针变量p不可变,p指向的对象(内容)可变
const int * const p;   //指针变量p和p指向的对象(内容)都不可变


 

怎么读?(参考书上的),方法:去除类型

const int *p;        // const修饰*p,所以不可变;p是指针,没被const修饰,可变
int const *p;        //const修饰*p,所以不可变;p是指针,没被const修饰,可变
int * const p;        // cosnt修饰的是指针p,不可变;*p没有被修饰,所以可变
const int * const p;   //const修饰了*p和p,所以都不可变。


( 3 )const修饰函数参数

   cosnt修饰参数,表明该参数不允许改变!

如strcpy程序(考的特多的函数),防止strSrc被修改,使用const限制

char *strcpy( char *strDest, const char*strSrc )
{
         //判断下面的表达式是否成立,不成立退出
         assert(( strDest!= NULL ) && ( strSrc!= NULL) );  //断言
        
         char*address= strSrc;  //保存strSrc
        
         //一一赋值
         while(( *strDest++= *strSrc++ )!= '\0' )  //!=优先级高于=
         {  
                   ;//空语句
         }
        
         return  address; //返回原字符strSrc,支持链式表达
}


( 4 )cosnt修饰函数返回值

   const修饰函数返回值,就是反之返回值被修改

 

【指尖的微笑】错误在所难免,希望得到大家的指正^-^

转载时保留原文的链接http://oursharingclub.joinbbs.nethttp://blog.csdn.net/mirrorsbeyourself

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值