【发布时间】:2016-01-31 00:23:57
【问题描述】:
在 K&R 的第 109 页显示了使用指向指针数组的指针迭代编写的 writelines 函数:
void writelines(char *lineptr[], int nlines)
{
while(nlines-- > 0)
printf("%s\n", *lineptr++);
}
问题:只能通过函数调用以这种方式进行迭代,其中未指定指向 char 数组的指针大小吗?
如果我尝试在 main() 中进行测试,通过创建 char 数组指针,我必须指定大小。然后当我尝试 while 循环时,我收到错误消息:
Cannot increment value of type *char[2]
这是来自 main() 的测试代码:
char line[4] = "The";
char line2[8] = "dog ran";
char *p;
char *q;
char *mylinepointer[2];
p = alloc(10);
q = alloc(10);
strcpy(p, line);
strcpy(q, line2);
mylinepointer[0] = p;
mylinepointer[1] = q;
int nlines = 2;
while (nlines-- > 0)
printf("%s\n", *mylinepointer++);
【问题讨论】:
-
如果你仔细看这个例子,
*lineptr[]传递了指针数组,nlines给出了多少。迭代只是减少了nlines,它仅用作计数器,因为依次打印每个指针。不需要知道每个字符串的长度,字符串是 nul-terminated (表示每个字符串的结束位置)。不需要指定数组的长度,可以初始化为char line[] = "The";
标签: c arrays pointers iteration