0%

C语言结构体简要笔记

C语言中的结构体是一种由若干个不同类型的数据组合而成、可由用户自定义的数据类型。

结构体的定义和初始化

因为我懒,直接上源码吧,反正只有我自己看(つд⊂)。

//方式一

#include<stdio.h>

struct Person
{
char *name;
int age;
char sex;
};
struct Person me={"NIMITIZ",19,'M'};

int main()
{
printf("name: %s\n",me.name);
printf("age: %d\n",me.age);
printf("sex: %c\n",me.sex);
}
//方式二

#include<stdio.h>

struct Person
{
char *name;
int age;
char sex;
}me={"NIMITIZ",19,'M'};

int main()
{
printf("name: %s\n",me.name);
printf("age: %d\n",me.age);
printf("sex: %c\n",me.sex);
}
//方式三

#include<stdio.h>

int main()
{
struct Person
{
char *name;
int age;
char sex;
}me;
me.name="NIMITIZ";
me.age=19;
me.sex='M';
printf("name: %s\n",me.name);
printf("age: %d\n",me.age);
printf("sex: %c\n",me.sex);
}
  • 结构体可包含多个C语言提供的数据类型(例如intfloatchar等),也可包含其他结构体;
  • 结构体不能整体引用,只能引用结构体成员
  • 在定义结构体时,可对其进行整体赋值;但在使用过程中,只能对结构体成员逐一赋值
  • 结构体只是创建该数据类型的模板,不占用内存空间结构体成员才是该数据类型的实体,需要占用内存空间

结构体作函数参数

可把结构体作为函数参数来使用。

#include<stdio.h>

struct Person
{
char *name;
int age;
char sex;
};

void OUTPUT(struct Person I)
{
printf("name: %s\n",I.name);
printf("age: %d\n",I.age);
printf("sex: %c\n",I.sex);
}

int main()
{
struct Person me;
me.name="NIMITIZ";
me.age=19;
me.sex='M';
OUTPUT(me);
}

结构体数组

结构体数据即数组中的每个元素均为结构体。

#include<stdio.h>

struct
{
char *name;
char group;
int score;
}
class[]={{"Arthur",'A',89},{"John",'B',87},{"Dutch",'B',96},{"Micah",'A',76}};

int main()
{
int i,sum=0;
for(i=0;i<4;i++)
{
sum+=class[i].score;
}
printf("ALL: %d",sum);
}

指向结构体的指针

#include<stdio.h>

struct
{
char *name;
int age;
char sex;
}
Person={"NIMITIZ",19,'M'},*ptr=&Person;

int main()
{
printf("name: %s age: %d sex: %c",(*ptr).name,(*ptr).age,(*ptr).sex);
printf("\n");
printf("name: %s age: %d sex: %c",ptr->name,ptr->age,ptr->sex);
}

结构体数组 & 指向结构体的指针

#include<stdio.h>

struct G
{
char *name;
char group;
int score;
}
class[]={{"Arthur",'A',89},{"John",'B',87},{"Dutch",'B',96},{"Micah",'A',76}},*ptr;

int main()
{
int x=sizeof(class)/sizeof(struct G);
for(ptr=class;ptr<class+x;ptr++)
{
printf("name: %s group: %c score: %d\n",ptr->name,ptr->group,ptr->score);
}
}