使用数组初始化指针时会发生什么?

Sam*_*han 1 c arrays pointers

我理解在某种情况下数组如何衰变成指向第一个元素的指针.

我知道int array[] = {1,2,3,4,5}创建一个数组,我们可以创建一个指针int *ptr = array,在指定之后,也指向数组的第一个元素.

问题是,当我这样做时会发生什么:int *ptr = {1,2,3,4,5}

我想printf("%d",ptr),printf("%d",ptr+1)printf("%d",ptr+2)它返回1,5并且9分别.

我试过printf("%d",*ptr),它返回一个segmentation fault

所以我看到ptr指向数组{1,2,3,4,5},并再次尝试:

for(int i=0;i<5;i++){
    printf("%d",(*p)[i]);
}
Run Code Online (Sandbox Code Playgroud)

然后它回来了 subscripted value is neither array nor pointer nor vector

然后我用Google搜索,无法真正找到我要找的东西.

Que*_*tin 6

使用合适的编译标志立即给出答案:

main.cpp:1:13: error: incompatible integer to pointer conversion initializing 'int *' with an expression of type 'int' [-Werror,-Wint-conversion]
int *ptr = {1,2,3,4,5};
            ^
main.cpp:1:15: error: excess elements in scalar initializer [-Werror]
int *ptr = {1,2,3,4,5};
              ^

你隐式转换1为a int *,并抛弃多余的初始化器.

sizeof(int)(此处为4)的倍数完成的指针算法是产生59.