【发布时间】:2021-01-06 01:37:42
【问题描述】:
这是我最近在线测试中要求的预测输出程序。我无法获得准确的输出,因为我不熟悉双指针解引用。我知道后缀操作的优先顺序和副作用,这对于理解指针问题至关重要。
请通过给出双指针取消引用的示例来帮助我处理此代码 sn-p。 有关单指针取消引用的更多信息,这是一个非常有用的答案: Pointer expressions: *ptr++, *++ptr and ++*ptr
#include <stdio.h>
int main()
{
char *a[] = {"NITK", "SURATH", "KALMAN", "GALO", "BREAK", "REJOIN"};
char **b[] = {a + 2, a + 3, a, a + 1, a + 5, a + 4};
char ***c = b;
*c++;
printf("%s\t", *++*c);
printf("%s\t", **c + 2);
printf("%c", (*(**(c + 2) + 2) + 2));
return 0;
}
预期输出:
BREAK EAK T
P.s这个问题可能没有实际用处,但对理解双指针的概念会有所帮助。
【问题讨论】:
-
避免这种表达方式。它们没有任何实际用途。实际上,如果我在进行代码审查时看到这样的事情 - 我要求重写整个事情。
-
同意@P__J__,但这个问题来自测试。
-
我同意@P__J__。正如我提到的这个问题来自一个测试,我只是想澄清我对双指针取消引用的概念。
-
关于:
char ***c = b;three star programmer -
从右到左读取表达式是最容易的,例如:
*++*c。这导致:变量 c 是一个指针,该指针预递增,该指针取消引用。但是,必须注意运算符的优先级,因此++将首先完成,然后是两个取消引用。建议阅读C precedence
标签: c string pointers double-pointer