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

时间:2016-01-31 00:23:58

标签: c arrays pointers iteration

在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++);

1 个答案:

答案 0 :(得分:1)

mylinepointer是一个包含2个char指针的数组。这句话

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

尝试修改数组。您无法修改数组。数组是不可修改的左值。将数组传递给函数时,它会对指针的副本进行操作。因此指针算法有效。 在main()中打印的等效方法将用于指针:

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

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