我理解在某种情况下数组如何衰变成指向第一个元素的指针.
我知道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搜索,无法真正找到我要找的东西.
使用合适的编译标志立即给出答案:
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)的倍数完成的指针算法是产生5和9.
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |