关于数组指针的一道面试题
2011-09-26 17:07
375 查看
看下面一道面试题:
输出结果为:2,5
在这里主要是考察*(a+1)和&a+1的区别了。
很显然*(a+1)取的是a[1],然而&a+1取的是什么呢?&a不是首地址加1,而是加上1个a数组大小的偏移。因此ptr实际上等于a+5,所以*(ptr-1)实际上取的是a[4]。
原为是:
&a相当于一个数组指针 int (*)[5],该指针加1相当于移动5个int的存储空间,因此ptr等于a+5。
#include<stdio.h> #include<stdlib.h> int main(void) { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d",*(a+1),*(ptr-1)); return 0; }
输出结果为:2,5
在这里主要是考察*(a+1)和&a+1的区别了。
很显然*(a+1)取的是a[1],然而&a+1取的是什么呢?&a不是首地址加1,而是加上1个a数组大小的偏移。因此ptr实际上等于a+5,所以*(ptr-1)实际上取的是a[4]。
原为是:
&a相当于一个数组指针 int (*)[5],该指针加1相当于移动5个int的存储空间,因此ptr等于a+5。
相关文章推荐
- 一道关于返回指针和返回数组名的面试题
- 关于C数组指针的一道面试题
- 一道关于返回指针和返回数组名的面试题
- 关于数组指针的一道面试题
- C/C++拾遗:关于数组的指针和数组元素首地址的一道经典题
- 一道关于二维数组和指针数组的C语言笔试题目
- 关于结构体以及内部指针的一道面试题
- 关于数组和指针的一道例题的解读
- 关于数组与指针的一个面试题
- C/C++拾遗(一):关于数组的指针和数组元素首地址的一道经典题
- 华为面试题——一道关于指针方面的编程题(C/C++)
- 华为面试题——一道关于指针方面的编程题(C/C++)
- 关于javascript 数组的正态分布排序的一道面试题
- 华为面试题——一道关于指针方面的编程题(C/C++)
- C/C++拾遗(一):关于数组的指针和数组元素首地址的一道经典题
- C++学习笔记(9)----关于变量和数组大小的一道容易出错的面试题
- C/C++ 关于数组的指针和数组元素首地址的一道经典题
- 关于sizeof和字符指针和数组。
- 关于理解数组与指针
- 关于一道面试题