1、访问结构体变量的两种方式:见例一
第一种:stu.id = 1001;
第二种:pst->id = 99;
第二种用的的证明如下:
struct Student *pst;
pst = &stu; //pst指向了stu,所以*pst等价于stu
pst->id = 99; //pst->id 等价于 (*pst).id,而(*pst).id等价于stu.id;所以pst->id等价于stu.id。pst指向结构体中id这个成员。
2、结构体变量:见例二
结构体变量不能加减乘除,但是能相互赋值。
普通结构体变量和结构体指针变量作为函数参数的问题:指针变量本身占四个字节,若结构体变量作为参数,用指针传递参数可大大减少内存消耗。若以结构体的一个对象作为参数,则开销会增大。
例一
#include<stdio.h>
#include<string.h>
struct Student{
int id;
char name[20];
int age;
};
int main() {
struct Student stu = { 1000 , "lisi" , 20 };
printf("%d %s %d\n", stu.id, stu.name, stu.age);
//如何使用结构体
//第一种方式
stu.id = 1001;
strcpy_s(stu.name, "zhangsan");
stu.age = 22;
printf("%d %s %d\n", stu.id, stu.name, stu.age);
//第二种方式
struct Student *pst;
pst = &stu; //pst指向了stu,所以*pst等价于stu
pst->id = 99; //pst->id 等价于 (*pst).id,而(*pst).id等价于stu.id;所以pst->id等价于stu.id。
//pst指向结构体中id这个成员
return 0;
}
例二:
#include<stdio.h>
#include<string.h>
struct Student {
int id;
char name[20];
int age;
};
void f(struct Student *pstu);
void g_1(struct Student stu);
void g_2(struct Student *pstu);
int main() {
struct Student stu; //已经为stu分配好了内存
f(&stu);
g_1(stu); //加上记忆对齐至少28+个字节 ,耗内存
g_2(&stu); //指针变量只有4个字节大小
return 0;
}
void f(struct Student *pstu) {
(*pstu).id = 1001;
strcpy_s(pstu->name, "zhangsan");
pstu->age = 22;
}
void g_1(struct Student stu) {
printf("%d %s %d\n", stu.id, stu.name, stu.age);
}
void g_2(struct Student *pstu) {
printf("%d %s %d\n", pstu->id, pstu->name, pstu->age);
}