#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;
}
Run Code Online (Sandbox Code Playgroud)
对于这段代码我得到了为什么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
Run Code Online (Sandbox Code Playgroud)
您正在获得未定义的行为.在第一个循环结束时p指向"一个结束" b.在不重置它的情况下,然后取消引用它并继续增加它,这两者都会导致未定义的行为.
这可能是您的实现数组a的数组后立即保存b并p已开始指向到数组a.这将是一个可能的"未定义"的行为.