当它授予lineptr[nlines++] = p时,在下一个循环中再次执行lineptr[nlines++] = p,执行lineptr[--nlines]lineptr[]的元素,p所指的元素之前的元素),他会因为p的变化而改变。我尝试使用简单的示例,并使用一些整数尝试实现这一点,但这给了我不同的“结果”?我在k&r书中找到了这个示例lineptr[nlines++] = p

int readlines(char *lineptr[], int maxlines)
{
int len, nlines;
char *p, line[MAXLEN];

nlines = 0;
while ((len = getline(line, MAXLEN)) > 0)
if (nlines >= maxlines || (p = malloc(len)) == NULL)
  return -1;
else {
  line[len - 1] = '\0';  /* delete the newline */
  strcpy(p, line);
  lineptr[nlines++] = p;
                 }
return nlines;
}

最佳答案

如果我理解正确,您会问是否更改在下一个循环遍历中使用的p的值是否会修改在上一个遍历中设置为p的值的数组元素...答案是没有。分配每个数组元素后:

lineptr[nlines++] = p;


它成为赋值时p的任何值的副本...稍后更改p(指针值)不会修改数组元素。如果您更改了p指向的内容而没有更改p本身,则情况将有所不同,因为array元素仍将指向相同的数据。

关于c - 指针出现问题,标题无法解释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26575503/

10-11 18:29