C语言const的理解

const 是C语言的新的特性,很多库函数strcpy等的实现都有使用。 


1. const 修饰普通变量(char, int等)

    E.G : const  char c;   

     表示变量c是常量


2. const修饰一维指针

   E.G:  const char *p;  // 表示p指向的内容不可以, 但p可变

            char const *p;   // 同上

            char * const p;  // 表示p是常量, 其指向的内容可变


            const的结合原则: const 在 “*”号左侧, 修饰的指针p指向的内容,  否则修饰指针p


3. const 修饰二维指针

    E.G:   const  char **p;

               可以拆分为[ const char * ]  [ *p ],  故指针p指向(const char *)类型,即指向一个指向内容不变的指针


----------------------------------------------------------------------

const 指针赋值的问题:

<<C专家编程>>中有1.9节有提到,

 我简单说一下理解: 左右两个操作数(指向)的数据类型是一致的,左操作数的限定符(限制的条件)多余或等于右操作数的限定符,

即左操作数约束条件更多


1.  const char * 和 char *

      E.G:  const  char *p;   char *q;

                   p = q;     // 正确。p,q都是char *类型的指针, p中多了限定符const

                   q = p;     // 错误。 q的限制约束小于p


2. const char ** 和 char **

    E.G:   const char **p;   char **q;

              p = q;    // 错误

              q = p;    // 错误

            const char **p 可以根据const的结合原则拆分为: [  const char * ] *p, 指针p指向类型[ const  char *p ]

            char **q 可以拆分为: [ char * ] *q, 指针q指向类型[ char * ]

            指针p和q均没有限定符。

           因为左右操作数指向的类型是不一致, 故赋值会出现问题。

           同理: C++的引用, const char &,  const char * &, 即引用和指针引用,和c语言的 const char * , const char **对应, 也会出现同样的问题

                        C++的指针赋值只要出现不兼容(除void *), 会直接报错, 所以正确的使用const在C++中也很重要, 防止出错了,不能理解错误的原因。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值