首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c/C++ 指针口试习题

2013-03-16 
c/C++ 指针面试习题小弟有个关于C语言指针的问题?原题是:int array[5] {1,2,3,4,5}int *ptr (int*)(&

c/C++ 指针面试习题
小弟有个关于C语言指针的问题?

原题是:

int array[5] = {1,2,3,4,5};

int *ptr = (int*)(&array+1);

cout << *(array+1) <<  "    " << *(ptr-1) << endl;

我不明白的是:&array+1 是什么意思?以前没有接触过,所以不明白,希望大神来解答。

指针,C?,C++
[解决办法]
&array是指针的指针,即为变量array的地址。&array+1实际上是加上5个int的长度,因为array的类型是int[5],所以最后的输出是2和5
[解决办法]
一楼已经说了,&array得到的指针是一个指向有5个元素的数组指针,该指针加1偏移了5*sizeof(array[0]),所以ptr实际指向了array[5]的下一个元素,ptr-1指向了array[5]
[解决办法]
考察类型:
T* p; 
p + i; //等价于(T*)((char*)p + i * sizeof(t)) 

&aray的类型为 int (*)[5]

希望你能自己得到答案了。
[解决办法]
这个题目其实考的就是指针的偏移大小
[解决办法]
&取地址,取过地址后再加上sizeof(int)的大小。
[解决办法]

引用:
&amp;取地址,取过地址后再加上sizeof(int)的大小。
sizeof(array)
[解决办法]
引用:
前边为什么要一个强制类型转换?
因为表达式&array+1的结果的数据类型是 int(*)[5]
[解决办法]
1.int类型在32位机上,为4位,如:int array = 1; sizeof(array)=4。
所以int array[] ={1,2,3,4,5}; 这是5个int型,sizeof(array)=20;
2.array的地址内存表示:0x00000001,0x00000002,0x00000003,0x00000004  =1
                    0x00000005,0x00000006,0x00000007,0x00000008  =2
                    0x00000009,0x0000000a,0x0000000b,0x0000000c  =3
                    0x0000000d,0x0000000e,0x0000000f,0x00000010  =4
                    0x00000011,0x00000012,0x00000013,0x00000014  =5
                    0x00000015,0x00000016,0x00000017,0x00000018  =未知
3.array为array[0]的首地址0x00000001,array+1为array[1]的首地址0x00000005,以int的4字节大小相加以此类推。
4.&array是array[]的首地址0x00000001,但array[]为20字节,所以&array+1的首地址为0x00000015。
5.array是以int为大小,&array是以array[]的大小,编译器它要这样。。。理解不了就反驳为什么不这样,反驳不了你就懂了
[解决办法]
&(array+1) or (&array) + 1 ? 
[解决办法]
引用:
&amp;array是指针的指针,即为变量array的地址。&amp;array+1实际上是加上5个int的长度,因为array的类型是int[5],所以最后的输出是2和5
正解
[解决办法]
引用:
&amp;array是指针的指针,即为变量array的地址。&amp;array+1实际上是加上5个int的长度,因为array的类型是int[5],所以最后的输出是2和5



+1

这个已经解答了。
&array是一个指针,指向数组array的地址。array+1 就是在数字的地址上便宜一个int的地址,就是2
*(ptr-1)想让于 *((*array)-1),就是array的最后一个元素 5
[解决办法]
指针的问题想明白了就觉得很简单的希望楼主加油c/C++ 指针口试习题
[解决办法]
目测结果是 2和5

c/C++ 指针口试习题

热点排行