假设我有以下代码:

char *array[] = {"one", "two", "three"};
char *(*arrayPtr)[] = &array;

如何在数组上迭代?我试过但没用:
for(int i = 0; i < sizeof(array)/sizeof(array[0]); i++) {
    printf("%s\n", (*arrayPtr + i));
}

最佳答案

您的方案缺少引用。*arrayPtr + i是数组第i个元素的地址。意思是这是一个char**。您至少需要取消引用:

printf("%s\n", *(*arrayPtr + i));

但是,这不是有效的C,因为在定义指针时忽略了数组大小。我希望这不是你写的真正的代码。
另外,请注意,您可以使用Blagovest Buyukliev指出的下标运算符,但对运算符优先级感到厌烦。它是(*arrayPtr)[i]而不是*arrayPtr[i]

08-19 00:07