0

编译这个程序:

#include <stdio.h>

void main() {
    char *s = "helo";
    char **sp = &s;
    const char **csp = sp;
    const char *cs = *csp;
    printf("%s\n", cs);
}

得到警告:

cc.c: In function ‘main’:
cc.c:6:24: warning: initialization from incompatible pointer type [enabled by default]
     const char **csp = sp;
4

2 回答 2

1

char **sp

sp 是指向 char 的指针,并且 sp、*sp 和 **sp 都是可变的

const char **csp

csp 是指向 const char 的指针,csp 和 *csp 是可变的,但 **csp 是 const

现在让我们看看为什么const char** csp = sp不安全。

const char Imconst = 'A';
char* ImMutable;
const char** ImConstPtr = &ImMutable;  // This is illegal but if it is allowed
*ImConstPtr  = &Imconst;
*ImMutable = '1'; // We are trying to assign to "Imconst"

希望这可以消除疑问。

于 2013-11-13T06:06:53.637 回答
0

警告是因为 char ** 和 const char ** 不等价。正确地说,您可以修复原型(被调用者),或修复调用者(const char *)。

在http://c-faq.com/ansi/constmismatch.html找到精彩的文章

于 2013-11-13T06:00:55.370 回答