当它授予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/