为什么以下作品
char *arr[] = {"C", "C++", "Java", "VBA"};
char *(*ptr)[4] = &arr;
printf("%s\n", ++(*ptr)[2]);
printf("%s\n", ++(*ptr)[2]);
printf("%s\n", ++(*ptr)[2]);
输出
AVA
VA
一个
我无法弄清楚解除引用ptr
的信息增加的原因和位置。调试器告诉我(*ptr)[2]
确实增加了,ptr
保持不变,但我不知道如何解释它。
答案 0 :(得分:1)
数组下标运算符[]
的优先级高于preincrement运算符++
。所以表达是有效的:
++((*ptr)[2])
至于存储增量的位置,数组arr
是一个指针数组,每个指针都指向一个字符串文字。当您递增(*ptr)[2]
时,此指针的值增加1,因此它指向字符串文字中的下一个字符。
答案 1 :(得分:1)