在引用结构体指针的时候,只能在两种情况下通过三种方式实现。不能有其它臆想的方式。
利用结构体名作为实参、结构体指针作为形参,以调用函数的方式可以实现对结构体成员的改变。例子:
//用结构体名作为调用函数的参数
#include <stdio.h>
typedef struct
{
int a;
int b;
}Test;
int Change(Test *pChange);
void main()
{
Test test1;
Test *ptest1;
test1.a = 0;
ptest1 = &test1;
//结构体只有下面三种输出形式
printf("%d\n", test1.a);
printf("%d\n", ptest1 ->a);
printf("%d\n", (*ptest1).a);
printf("\n");
#if 1
Change(ptest1); //注意这里的实参是结构体名
printf("%d\n", test1.a);
printf("%d\n", ptest1 ->a);
printf("%d\n", (*ptest1).a);
printf("\n");
printf("%d\n", test1); //test保存的是结构体里的第一个元素
printf("%d\n", &(test1.a)); //结构体的第一个元素的地址
printf("%d\n", &(test1.b)); //结构体的第一个元素的地址,a和b的地址可以看出b占4个字节
printf("%d\n", &test1); //结构体的第一个元素的地址
printf("%d\n", ptest1); //结构体的第一个元素的地址
#endif
}
int Change(Test *pChange)
{
pChange ->a = 2;
pChange ->b = 3;
return 0;
}
注意:
1. test保存的不是地址,而是结构体里的第一个元素。
2. 结构体元素的引用只能有三种形式。