在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++);
答案 0 :(得分:1)
mylinepointer
是一个包含2个char指针的数组。这句话
printf("%s\n", *mylinepointer++);
尝试修改数组。您无法修改数组。数组是不可修改的左值。将数组传递给函数时,它会对指针的副本进行操作。因此指针算法有效。
在main()
中打印的等效方法将用于指针:
int nlines = 2;
char **tmp = mylinepointer;
while (nlines-- > 0)
printf("%s\n", *tmp++);
}