c指针和数组

use*_*885 7 c arrays pointers

#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)

CB *_*ley 9

您正在获得未定义的行为.在第一个循环结束时p指向"一个结束" b.在不重置它的情况下,然后取消引用它并继续增加它,这两者都会导致未定义的行为.

可能是您的实现数组a的数组后立即保存bp已开始指向到数组a.这将是一个可能的"未定义"的行为.