C 迭代指向K&;中指针数组的指针;R

C 迭代指向K&;中指针数组的指针;R,c,arrays,pointers,iteration,C,Arrays,Pointers,Iteration,在K&R的第109页显示了用指针到指针数组的迭代编写的writelines函数: void writelines(char *lineptr[], int nlines) { while(nlines-- > 0) printf("%s\n", *lineptr++); } 问题:这种迭代只能通过函数调用来完成吗?在函数调用中,并没有指定指向char数组的指针的大小 若我试图在main()中通过创建字符数组指针进行测试,我必须指定大小。然后,当我尝试while循环

在K&R的第109页显示了用指针到指针数组的迭代编写的writelines函数:

void writelines(char *lineptr[], int nlines)
{
    while(nlines-- > 0)
        printf("%s\n", *lineptr++);
}
问题:这种迭代只能通过函数调用来完成吗?在函数调用中,并没有指定指向char数组的指针的大小

若我试图在main()中通过创建字符数组指针进行测试,我必须指定大小。然后,当我尝试while循环时,会收到错误消息:

无法增加*char[2]类型的值

以下是main()中的测试代码:


mylinepointer
是由2个字符指针组成的数组。此声明

printf("%s\n", *mylinepointer++);
尝试修改数组。不能修改数组。数组是不可修改的左值。将数组传递给函数时,它将对指针的副本进行操作。所以指针算法是有效的。 在
main()
中打印的等效方法是使用指针:

int nlines = 2;
char **tmp = mylinepointer;

while (nlines-- > 0)
    printf("%s\n", *tmp++);
}

如果仔细看这个例子,
*lineptr[]
传递指针数组,而
nlines
给出了指针的数量。迭代只会减少只作为计数器的
nlines
,因为每个指针依次打印。不需要知道每个字符串的长度,字符串以nul结尾(表示每个字符串的结束位置)。不需要指定数组的长度,您可以初始化为
charline[]=“the”谢谢。您能告诉我为什么这在writelines中的迭代中不起作用吗?:while(nlines-->0)printf(“%s\n”,*lineptr[nlines]);对函数的调用必须是数组,这让人感到困惑。如果我尝试使用数组表示法进行迭代,它将失败。(例如,*lineptr[i++]、*lineptr[nlines]等)。任何附加信息将不胜感激。
*
(解引用运算符)进行一级间接寻址<代码>printf(“%s\n”,*lineptr[nlines])
不起作用,因为
*lineptr[nlines]
是一个字符,所以不能将其打印为字符串(使用
%s
),而
lineptr[nlines]
是指针,指向第一个字符串。最好阅读数组与指针的关系,以及它们在许多上下文中的相似行为,等等。我建议阅读这里的相关部分:并继续搜索数组与指针。这里有一个。你可能会有更多的问题。因此,最好学习一本教科书,自己尝试一些简单的例子,看看它是如何工作的。谢谢。我正在努力:)感谢你的全力帮助!
int nlines = 2;
char **tmp = mylinepointer;

while (nlines-- > 0)
    printf("%s\n", *tmp++);
}