我正在进行C编程,需要帮助解决这个问题。
char str[] = "Hello";
char * ptr = str;
char ** ptr2 = (char**)ptr;
我在头文件中有这三行。前两行很好,但第三行会出错。显然错误是“初始化元素不是常数”。
是否有其他方法可以在全球范围内将ptr
的地址分配给*ptr2
?或者全球无法实现这一目标?
我希望这样做,因此ptr2
可以是公共访问点,但如果需要,可以更改它指向的内容。
答案 0 :(得分:8)
首先,这个:
char ** ptr2 = (char**)ptr;
不会将ptr
的地址指定给ptr2
。它会将str
(包含在ptr
)中的地址分配给ptr2
,并假装其char**
而不是char*
,以后可能会带来灾难性后果试着用它。你可能意味着:
char ** ptr2 = &ptr;
由于&ptr
(地址)确实是常量,与ptr
(值)不同,这应该编译而不会出错。而且,无论如何,这都是你真正想要的。
答案 1 :(得分:0)
我猜您希望ptr2
指向ptr
。这意味着将ptr
的地址分配给ptr2
,而不是*ptr2
您必须这样做:
char** ptr2 = &ptr;
我不明白你的目标。 ptr
也可以根据需要进行更改。
请考虑更好的变量名称。