Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';将'char**'强制转换为'const char**'不安全吗?_C_Pointers - Fatal编程技术网

为什么';将'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"