const分析

    技术2022-07-11  108

    foo1(const char *p) {} foo2(const char **p) {} int main(int argc, char **argv) { char *s = NULL; foo1(s); char **t = NULL; foo2(t); return 0; }

    对于该段代码,在编译的时候会发出警告:

    warning: passing argument 1 of ‘foo2’ from incompatible pointer type [enabled by default] foo2(t); note: expected ‘const char **’ but argument is of type ‘char **’ foo2(const char **p)

     一般,实参char *s与形参const char *p应该是相容的,但是char **t与形参const char **p实际上却不能相容。

    char *cp; const char *cpp; cpp = cp; 左操作数是一个指向有const限定符的char指针。 右操作数是一个没有限定符的char的指针。 char类型与char类型是相容的,左操作数所指向的类型具有右操作数所指向类型的限定符(无),再加上自身的限定符(const)。 注意:反过来就不能进行赋值。 cp = ccp; //编译发出警告

    关键字const并不能把变量变成常量,在一个符号前加上const限定符只是表示该变量不能被赋值,即是它的值对于这个符号来说是只读的。const最有用之处是用它来限定函数的形参,这样改函数就不会修改实参指针所指的数据,但其他的函数却可能会修改它。

    const可以用在数据上如: const int limit = 10; 当在等式两边加上指针,就不同了: const int * limitp = &limit; int i = 27; limitp = &i;

    该段代码表示limitp是一个指向常量整形的指针,这个指针不能用于修改这个整形数,但是在任何时候,这个指针本身的值却是可以改变的。

    注:本文内容参考自《C专家编程》。

     

     

    Processed: 0.011, SQL: 9