C中的const限定符与指针间的相互赋值






 

在C中,把一个指针q赋给另一个指针p(p = q)时要保证:

  1.        p和q指向相容的类型
  2.        p和q所指的类型可以带限定符(const...)或不带
  3.        p所指的类型必须有q所指类型的所有限定符

Example

  •        (char *) can assign to (const char *)
  •        (char **) can assign to (char * const *) but can't assing to (const char **)
      

Example Source Code

const.c

/**
 * File Name: const.c
 * Date: 2008-3-27
 * Intention: Understanding the type-qualifier const
 * Run Environment: gcc-4.1.2 on Linux 2.6.23.1
 * Compile Command: gcc const.c -o const.o
 * Usage: ./const.o
 */

#include <stdio.h>
#include <stdlib.h>

void testConstF0();
void testConstF1(const char *p);
void testConstF2(const char **p);
void testConstF3(char * const *p);

int main(int argc, char *argv[]){

    printf("/nWhile assigning between pointer:/n");
   
    testConstF0();
    testConstF1(*argv);        /*(char *) assigns to (const char *)*/
    /*
        While compiling,
     call testConstF2(const char **p) by testConstF2(argv) will get a  warning: passing argument 1 of ‘testConstF2’ from incompatible pointer type
    */
    /*testConstF2(argv);*/        /*(char **) assigns to (const char **)*/
    testConstF3(argv);        /*(char **) assigns to (char * const *)*/

    exit(0);
}

void testConstF0(){
    const int i = 1;            /*i can only be assigned value at here*/
    /*int *p = &i;*/            /*get a warning: initializatioin discards qualifier from pointer to target type */
    const int *p = &i;
    int j = 2;
    p = &j;
}

void testConstF1(const char *p){
    printf("/n(char *) can assign to (const char *)/n");
}

void testConstF2(const char **p){
    printf("/n(char **) can't assign to (const char **)/n");
}

void testConstF3(char * const *p){
    printf("/n(char **) can assign to (char * const *)/n");
}

Result


While assigning between pointer:

(char *) can assign to (const char *)

(char **) can assign to (char * const *)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值