#include <stdlib.h>
#include <stdio.h>
int main (void)
{
int a[] = {1,2,3,4,5};
int b[] = {0,0,0,0,0};
int *p = b;
for (int i =0; i < 5; i++)
{
b[i] = a[i]+1;
*p = a[i]+1;
p++;
}
for (int i = 0; i < 5; i++)
{
printf (" %i \t %i \t %i \n", *p++, b[i], a[i]);
}
return 0;
}
对于这段代码,我明白了为什么 a 和 b 的输出但是为什么指针具有相同的 a 值?
*p 是 b[0] = a[0]+1,不是吗? 所以 p++ 表示 b 的下一个地址,所以它是 b[1]=a[1]+1。
ie
*p b a
1 2 1
2 3 2
3 4 3
4 5 4
5 6 5
最佳答案
您遇到了未定义的行为。在第一个循环结束时,p
指向 b
的“one past the end”。在不重置它的情况下,您取消引用它并继续递增它,这两者都会导致未定义的行为。
可能是在您的实现中,数组a
紧跟在数组b
之后,而p
已经开始指向数组 a
。这将是一种可能的“未定义”行为。
关于c 指针和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15224892/