结构体—声明—初始化—成员访问—传参

声明:

struct stu
{
	char name[20]={0};
	int age=0;
	char sex[5]={0};
	float score=0;
}student;


typedef struct stu
{
	char name[20]={0};
	int age=0;
	char sex[5]={0};
	float score=0;
}student;

这俩种声明方式不同点在于第一种的student是结构体变量,而第二种的student是结构体类型名,其原因是因为第二种前面有typedef,typedef是类型重命名,所以产生不同。

初始化:

struct stu student={0,0,0};
struct stu students[3] = {{9801,”zhang”,20},{9802,”wang”,19},{9803,”zhao”,18}};

成员访问:

	printf("%s\n"student.name);//student为变量
	printf("%s\n",(*student).name);//student为指针变量
	printf("%d\n",student->age);//student为指针变量

结构体成员访问的时候大多我们不是得到的结构体变量,而是得到一个指向结构体的指针。

传参:

struct stu
{
  int num;
  char name[10];
  int age;
}p;
void fun_1(struct stu *p)
{
	printf("%s\n",(*p).name);
	printf("%d\n",p->age);
	return;
}

void fun_2(struct stu p)
{
	printf("%s\n"p.name);
	return;
}

int main()
{
  	scanf("%d",&p.num);
	scanf("%s",&p.name);
	scanf("%d",&p.age);
  fun_1(p);
  fun_2(p);
  return 0;
  }

对于上面俩种传参方式,我们尽量选择第一种,因为函数传参的时候。参数需要压栈,如果传递一个结构体对象的时候,结构体过大,参数压栈的时候系统开销过大,会导致性能下降。

发布了13 篇原创文章 · 获赞 21 · 访问量 9860

猜你喜欢

转载自blog.csdn.net/Shangxingya/article/details/104254074