【求助】关于指针
c语言吧
全部回复
仅看楼主
level 4
#include<stdio.h>
main()
{
int *ptr
int fort[2][2] = {{12},{14,16}};
ptr = fort[0];
printf("%d",
*(ptr+2));
}
为什么是16.不应该是输出fort[0][2];的内容么。虽然这个内容没有。
2016年03月08日 12点03分 1
level 4
想知道原理
2016年03月08日 12点03分 2
fort[2][2],声明了两组,每组两个,fort[0][0],fort[0][1],fort[1][0],for[1][1],然后就没了,哪里来的for[0][2],如果你声明fort[3][3],才会有fort[0][2],ptr指针指向了fort[0][0],+2之后就指向了fort[1][0]就等于14啊,无论是几维数组,它还是一个数组,你加5试试,肯定就越界了,
2016年03月08日 13点03分
level 14
沒有 fort[0][2]
應該是 fort[1][0] = 14
我 run 了一下也是輸出 14 而非 16 啊
2016年03月08日 12点03分 3
问题是怎么解释,应该是越界的才对,为什么会输出第二个数组的第一个元素
2016年03月08日 12点03分
沒越界啊,看來樓主沒弄清楚陣列原理:一般來說,無論你跟OS要的是幾維陣列,在實作上還是個一塊連續的一維陣列(或者該說是記憶體),也就是說&fort[0][1]的下一個位址是&fort[1][0]
2016年03月08日 12点03分
不過好像也不一定是連續的記憶體空間,不過這個OS會處理,你就把它當作是連續的
2016年03月08日 13点03分
@🐯笹川了平🐯 我跟OS只要了一个结构体数组stu[1],如果我取stu[1]的地址后,地址+1是指向stu[2]吗?
2016年03月08日 13点03分
level 11
不应该是14么?
2016年03月08日 12点03分 4
1