欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

数组题目分享

程序员文章站 2022-12-16 20:36:15
2019-01-26 16:06:35 数组名是数组这种类型的变量名,所以对数组名取地址是取的整个数组的地址,所以&a+1自然要跨过整个数组的长度,本题即跨过2*5 = 10个int的长度。 有了上述概念,再来分析这道题,int *ptr = (int *)(&a+1),p此时指向的地址应该是a[1 ......

2019-01-26  16:06:35

1 int main()
2 {
3     int a[2][5] = {2,3,4,5,6,7,8,9,10,11};
4     int *ptr = (int*)(&a+1);
5     cout<<*(ptr-3)<<endl;
6 }


数组名是数组这种类型的变量名,所以对数组名取地址是取的整个数组的地址,所以&a+1自然要跨过整个数组的长度,本题即跨过2*5 = 10个int的长度。
有了上述概念,再来分析这道题,int *ptr = (int *)(&a+1),p此时指向的地址应该是a[1][4]后面的地址,由于ptr是int型指针,ptr-3应该是ptr向前移动3个元素,即ptr-3指向a[1][2],所以*(ptr -3) = 9