69,371
社区成员
发帖
与我相关
我的任务
分享
#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));
}