为什么';将'char**'强制转换为'const char**'不安全吗?
编译此程序:为什么';将'char**'强制转换为'const char**'不安全吗?,c,pointers,C,Pointers,编译此程序: #include <stdio.h> void main() { char *s = "helo"; char **sp = &s; const char **csp = sp; const char *cs = *csp; printf("%s\n", cs); } 警告是因为char**和const char**不等效。为了正确起见,您可以修复原型(被调用方),或者修复调用方(const char*) 在char*
#include <stdio.h>
void main() {
char *s = "helo";
char **sp = &s;
const char **csp = sp;
const char *cs = *csp;
printf("%s\n", cs);
}
警告是因为char**和const char**不等效。为了正确起见,您可以修复原型(被调用方),或者修复调用方(const char*)
在
char**sp
sp是指向char的指针,sp、*sp和**sp都是
易变的
const char**csp
csp是指向const char的指针,csp和*csp是
可变,但**csp是常量
现在让我们看看为什么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"
希望这能澄清疑问
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"