printf("%s\n", *cpp[-2] + 3),
我的理解:cpp是三级指针,此时指向的是二级指针首地址,解引用后是 c+3,然后再+3
看别人的他是把 *cpp[-2] 转换为 * *(cpp-2)+3),他的这个我能理解,cpp-2指向二级指针首地址,然后解引用后得到一级指针地址,再解引用后得到一级指针里的"FIRST",
想问这个是怎么转换的?又怎么理解?
int main()
{
char* c[] = { "ENTER","NEW","POINT","FIRST" };
char** cp[] = { c + 3,c + 2,c + 1,c };
char*** cpp = cp;
printf("%s\n", **++cpp);
printf("%s\n", *-- * ++cpp + 3);
printf("%s\n", *cpp[-2] + 3);//怎么理解?* *(cpp-2)+3)
printf("%s\n", cpp[-1][-1] + 1);
return 0;
}
你确认这代码可以运行?
【以下回答由 GPT 生成】
这段代码中,cpp
是一个指向二级指针数组cp
的指针。cp
是一个二级指针数组,其中包含四个元素,每个元素都指向c
数组中的一个字符串。下面我们来逐行解析代码:
printf("%s\n", **++cpp);
这行代码的目的是输出c[2]
,即字符串"POINT"。cpp
首先被递增,指向了cp
的第二个元素,即c+1
。然后两次解引用操作**
将指针操作转换为了字符串,最终输出了c+1
对应的字符串"POINT"。
printf("%s\n", *--*++cpp + 3);
这行代码的目的是输出c[0]
,即字符串"ENTER"后的3个字符。cpp
首先被递增,指向了cp
的第三个元素,即c+3
。然后递减操作--
将指针操作转换回了c+2
,再解引用操作*
得到c+2
对应的字符串"NEW"。最后,3被加到了字符串的指针上,输出了"WER"。
printf("%s\n", *(*(cpp-2)) + 3);
这行代码的目的是输出c[3]
,即字符串"FIRST"后的3个字符。cpp
递减2个单位,指向了cp
的第一个元素,即c
。然后两次解引用操作**
将指针操作转换为了字符串,最终输出了c
对应的字符串"FIRST"。
printf("%s\n", cpp[-1][-1] + 1);
这行代码的目的是输出c[2]
,即字符串"POINT"后的1个字符。cpp[-1]
表示cp
的第三个元素,即c+2
;再次索引[-1]
即得到了c+2
对应的字符串"POINT"。最后,1被加到了字符串的指针上,输出了字母"O"。
【相关推荐】