本帖最后由 jinyi7016 于 2015-9-28 20:02 编辑
背景 问以下程序的运行结果是什么? - char a[4]={1,2,3,4};
- char *ptr=(int*)(&a+1);
- printf("%d",*(ptr-1));
复制代码解决 初步看,结果好象是3,为了确定 一下,在K60上运行了一下,结果是4。 回过头来分析一下。 - int a[4]={1,2,3,4}; // a:数组第一个元素的地址,就是 a[0]的地址;
- int *ptr=(int*)(&a+1); // &a+1:下一数组的首地址,即(int)&a+4*sizeof(int) ,ptr 等效于 &a[4]
- printf("%d",*(ptr-1));//ptr-1 就 等效于 &a[3] ,加上* 取内容,那么结果就是
复制代码延伸 a+1是指的数组的第2个元素,就是a[1]=2, 但&a+1可就不是这个意思了,这里我也弄混了。 指针还真不是好玩的啊。 下面这个的呢 - char *p="freescale";
- p[1]='m';
- printf("%s",p);
复制代码 有知道的么?
|