数组nice to see you again
2013-12-03 19:45
357 查看
#include <stdio.h> #include <stdlib.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char *argv[]) { int a[5]={1,2,3,4,5}; int *ptr1=(int *)(&a+1); int *ptr2=(int *)((int)a+1); printf("%d,%d",ptr1[-1],*ptr2); return 0; }
上测试程序来自《C语言深度解析》中的一个习题:
分析如下:
先打印出结果:
格式符变一下;;;;
printf("%d,%p",ptr1[-1],*ptr2);
ptr1[-1]结果为5,很显然,这个表达式看上去乖乖的,但是编译器并未报错 运行正常,,个人认为这个结果完全正确!
ptr1指针指向数组最后一个元素接下来的那个地址,ptr1[-1]这里ptr1相当于数组名a的作用,-1就往后退一个数组元素大小的内存单元,也就是a[4]所在的地址单元
输出5是正确的!
*ptr2 = 2???不!!!!
(int)a+1与a+1是完全不同的两个东西。你区分明白了木有。。。。
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[])
{
int a[5]={1,2,3,4,5};
int *ptr1=(int *)(&a+1);
int *ptr2=(int *)((int)a+1);
printf("%p\n",(int *)(int)a+1);//0022ff28
printf("%d,%p",ptr1[-1],*ptr2);
return 0;
}
*ptr2的值就是内存单元0022ff28内存储存的内容!鬼知道编译器是怎么想的
相关文章推荐
- OpenStack Ceilometer 监控项扩展(havana) - Nice to see you once again
- 奥运英语[5] 很高兴再次见到你 Good to see you again.
- OpenStack Ceilometer 监控项扩展(havana) - Once again to see you
- See you again(电影《速度与激情7》主题曲)
- See You Again
- how to show a dialog box that prompts you to either "Open it" or "Save it to disk"again?
- Nice to meet you, STL.
- Nice to meet you
- CF 810 D. Glad to see you!
- [交互题][二分]Codeforces#415 (Div. 1) 809B. Glad to see you!
- I don’t want to see another “using namespace xxx;” in a header file ever again
- I don’t want to see another “using namespace xxx;” in a header file ever again
- Lesson 5 Nice to meet you
- 【iOS】CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable
- iOS报错 - If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variabl
- Don’t predict; create the 2014 you want to see
- very nice to have talked with you via phone
- Codeforces Round #415 (Div. 2) D. Glad to see you! 二分, 交互
- [转载] New Concept English 1——Lesson 5 Nice to meet you
- PHP入门Demo(只为前端了解)When you really want to know a thing, You will see is really very simple.