|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 我是大甲鱼 于 2018-8-22 23:42 编辑
- #include <stdio.h>
- typedef struct ex
- {
- int a;
- int b;
- }ex,*p_ex;
- void fun(p_ex temp);
- ex msg;
- int main()
- {
- msg.a=2;
- printf("befor msg.a=%d\n",msg.a); //msg.a的值
- printf("&(msg.a)=%p\n",&(msg.a)); //msg.a的地址
- fun(&msg); //经过函数处理 msg.a的值被函数中的temp[0].a=3;改变
- printf("after msg.a=%d\n",msg.a); // 为什么msg.a会被temp[0].a改变呢?可能是他们的地址是一样的
- //可是为什么temp[1].a temp[2].a 可以被赋值,又应该怎么用temp来访问??
- putchar('\n');
- return 0;
- }
- void fun(p_ex temp)
- {
- printf("-------------对应值---------------\n");
- temp->a=1;
- printf("temp->a=%d\n",temp->a);
- temp[0].a=3;
- printf("temp[0].a=%d\n",temp[0].a);
- temp[1].a=4;
- printf("temp[1].a=%d\n",temp[1].a);
- temp[2].a=5;
- printf("temp[2].a=%d\n",temp[2].a);
- temp[0].b=6;
- printf("temp[0].b=%d\n",temp[0].b);
- temp[1].b=7;
- printf("temp[1].b=%d\n",temp[1].b);
- temp[2].b=8;
- printf("temp[2].b=%d\n",temp[2].b);
- printf("-------------对应地址---------------\n");
- printf("&(temp->a)=%p\n",&(temp->a));
- printf("&(temp->b)=%p\n",&(temp->b));
- printf("&(temp[0].a)=%p\n",&(temp[0].a));
- printf("&(temp[0].b)=%p\n",&(temp[0].b));
- printf("&(temp[1].a)=%p\n",&(temp[1].a));
- printf("&(temp[1].b)=%p\n",&(temp[1].b));
- printf("&(temp[2].a)=%p\n",&(temp[2].a));
- printf("&(temp[2].b)=%p\n\n",&(temp[2].b));
- }
复制代码
运算结果:
befor msg.a=2
&(msg.a)=00427E60
-------------对应值---------------
temp->a=1
temp[0].a=3
temp[1].a=4
temp[2].a=5
temp[0].b=6
temp[1].b=7
temp[2].b=8
-------------对应地址---------------
&(temp->a)=00427E60
&(temp->b)=00427E64
&(temp[0].a)=00427E60
&(temp[0].b)=00427E64
&(temp[1].a)=00427E68
&(temp[1].b)=00427E6C
&(temp[2].a)=00427E70
&(temp[2].b)=00427E74
after msg.a=3
Press any key to continue
总算明白你要问什么了。
temp[0]就相当于*(temp+0),相当于temp
temp[1]就相当于*(temp+1),相当与temp的下一个地址
以此类推
|
|