青山梦好
发表于 2012-5-23 13:36:40
{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}
.忧郁dё訷
发表于 2012-5-23 13:53:26
0000001,0000002
无脑仔工作室
发表于 2012-5-23 14:47:47
{:5_107:}{:5_107:}
惜似水流年
发表于 2012-5-23 14:48:32
dddddddddddddddddddddddd
枫幻
发表于 2012-5-23 16:07:18
看看
{:5_102:}{:5_102:}
云端漫步
发表于 2012-5-23 16:22:15
{:1_1:}{:1_1:}
越野e族
发表于 2012-5-23 16:29:07
来看看,想了想,有点头绪了
自由的心
发表于 2012-5-23 16:47:03
看看答案是多少
翠竹
发表于 2012-5-23 17:23:08
赞一个!{:5_109:}
可里@天意社区
发表于 2012-5-23 22:11:18
呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜
方丈
发表于 2012-5-23 22:15:28
貌似没看错的话 题目出自AOGO论坛吧
楚门
发表于 2012-5-23 22:19:37
方丈 发表于 2012-5-23 22:15 static/image/common/back.gif
貌似没看错的话 题目出自AOGO论坛吧
我从《C语言 深度剖析》这本书上看到的
神的现身
发表于 2012-5-23 22:35:16
凌乱看不明
神品江湖
发表于 2012-5-24 00:00:49
seeeeeeeeeee
无脑仔工作室
发表于 2012-5-24 09:18:27
本帖最后由 无脑仔工作室 于 2012-5-24 09:20 编辑
#include <stdio.h>
int main(void)
{
int i;
char *pp;
int a={1,2,3,4,5};//该数组换成7来对比
//int a={1,2,3,4,5,6,7};//该数组换成7来对比
int *ptr1=(int *)(&a+1);
//int *ptr11=&a;该句错误 cannot convert from 'int (*)' to 'int *'
//说明&a是int(*)类型 对其加1 就是 a=a+sizeof(int(*));也就是整个数组的长度
//此时指针已经指向第六个元素(后面输出才会-1)
//所以才会出现最后一行输出最后一个数
//数组内部保存情况: 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05
//一般情况指针指向低位: |//指向1
//实现++后 | //它是根据sizeof(int)来判断的指向2
int *ptr2=(int *)((int)a+1);//为什么会输出200000
//数组内部保存情况: 00 00 00 01 / 00 00 00 02 / 00 00 00 03 / 00 00 00 04 / 00 00 00 05
//默认指针指向: |(int)a 把a的地址转换成整形
//实现+1后(int)a+1 | //指向1后面的0
//所以就是对00 00 00 02的输出,因为编译器对(int *)内部就已经对数组进行划分
//而00 00 00 02的输出(这个在小甲鱼的汇编语言中好像有它的存储结构)
// 12 56 89 36 -->>
// 12 56 89 36 -->>12 56 | 89 36
// 56 12 36 89 -->>56 12 | 36 89
// 36 89 12 56 //输出的结果
int *ptr11=(int *)&a;
int *ptr12=a+1;
printf("\n");
pp=(char *)a;
for(i=0;i<sizeof(a);i++)
printf("%d ",*(pp+i));
printf("\n");
printf("a1==%p\n",a);
printf("*p1==%p\n",ptr1);
printf("*p11=%p\n",ptr11+1);
printf("*p12=%p\n",ptr12);
printf("*p[-1]=%p\n",ptr1[-1]);
printf("*p=%p,%x\n",ptr2,*ptr2);
printf("%x,%x\n",ptr1[-1],*ptr2);
//对于ptr1[-1]的说明[]就是*(指针)的逆运算ptr1[-1]---> *(ptr1)-1
return 0;
}
/*
输出结果
1 0 0 0 2 0 0 0 3 0 0 0 4 0 0 0 5 0 0 0
a1==0012FF64
*p1==0012FF78
*p11=0012FF68
*p12=0012FF68
*p[-1]=00000005
*p=0012FF65,2000000
5,2000000
*/
//这道题我花了1个多小时才基本弄明白,不过很值得。很多问题只要多动手,多百度,花上一两小时就算弄不懂,也能收获很多!!加油!!!
//Ps:上面有错误的话,还请高手指点。:P
云在风中
发表于 2012-5-26 13:17:50
cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
jianxingangel
发表于 2012-5-28 17:20:45
没有看懂、
一杯沧海
发表于 2012-5-31 09:07:31
xiaocai....
Brand小坏
发表于 2012-5-31 19:53:10
看看答案
MC_e_e
发表于 2012-5-31 20:45:35
看看那