编译此程序:
#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;
答案 0 :(得分: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"
希望这可以解除疑问。
答案 1 :(得分:0)
警告是因为char **和const char **不相等。为了正确,您可以修复原型(被调用者),或修复调用者(const char *)。
找到精彩的文章