初识结构体
结构体的声明
结构体的基础知识
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
结构的声明
struct 标签
{
值;
值;
……
}变量列表;
例:
//定义一个结构体类型
struct Stu//struct - 结构体关键字 Stu - 结构体标签 struct Stu - 结构体类型
{
char name[20];
short age;
char tel[12];
char sex[5];
};//注意此处的分号必不可少
int main()
{
struct Stu s;//创建一个结构体变量
return 0;
}
当创建了结构体变量时,才分配了内存空间
例2
struct Stu
{
char name[20];
short age;
char tel[12];
char sex[5];
}s1,s2,s3;//s1,s2,s3是三个全局的结构体变量;
int main()
{
struct Stu s;//s是局部的结构体变量;
return 0;
}
例3
typedef struct Stu
{
char name[20];
short age;
char tel[12];
char sex[5];
}Stu;//代表:类型是Stu—>区别于上一个代码,在此处不再是创建全局变量
int main()
{
Stu s2;//此时只是用Stu也可以创建结构体变量s2
return 0;
}
结构体成员的类型
结构体成员的类型可以是标量、数组、指针、甚至是其他结构体
结构体变量的定义和初始化
定义结构体变量
方法一:在声明结构体变量的同时定义变量p1
struct Point
{
int x;
int y;
}p1;
方法二:直接定义结构体变量p2
struct Point p2;
结构体变量的初始化
例1
初始化结构体同用大括号 { }
typedef struct Stu
{
char name[20];
short age;
char tel[12];
char sex[5];
}Stu;
int main()
{
Stu s1 = {"张三",20,13598746325,"男"};//初始化
struct Stu s2 = {"旺仔",18,"13046956257","女"};//初始化
return 0;
}
例2
嵌套结构体初始化
struct S
{
int a;
char c;
char arr[20];
double d;
};
struct T
{
char ch[10];
struct S s1;
char* pa;
};
int main()
{
char arr[] = "okokgogogo!"
struct T t1 = {"haha",{6,"a","wowowowow",3.14},arr}//初始化
return 0;
}
结构体变量的打印
例
#include <stdio.h>
struct S
{
int a;
char c;
char arr[20];
double d;
};
struct T
{
char ch[10];
struct S s1;
char *pa;
};
int main()
{
char arr[] = "okokgogogo!";
struct T t1 = {"haha",{6,"a","wowowowow",3.14},arr};
printf("%s\n",t1.ch);//打印haha
printf("%s\n",t1.s1.arr);//打印wowowowow
printf("%lf\n",t1.s1.d);//打印3.14
printf("%s\n",t1.pa);//打印okokgogogo!
return 0;
}
结构体成员的访问
-
通过点操作符(.)来进行访问
-
点操作符接受两个操作数
结构体传参
例1
typedef struct Stu
{
char name[20];
short age;
char tel[12];
char sex[5];
}Stu;
void Print1(Stu tmp)
{
printf("name:%s\n",tmp.name);
printf("age:%d\n",tmp.age);
printf("tel:%s\n",tmp.tel);
printf("sex:%s\n",tmp.sex);
}
int main()
{
Stu s = {"小李",18,"13549626666","男"};
Print1(s);
return 0;
}
例2:用指针传参
typedef struct Stu
{
char name[20];
short age;
char tel[12];
char sex[5];
}Stu;
void Print2(Stu* pa)//接收的变量类型是指针
{
printf("name:%s\n",pa->name);
printf("age:%d\n",pa->age);
printf("tel:%s\n",pa->tel);
printf("sex:%s\n",pa->sex);
}
int main()
{
Stu s = {"小李",18,"13549626666","男"};
Print2(&s);//传递的是指针
return 0;
}
优先选择地址传参!
如果传递一个结构体对象时,结构体过大,系统开销大,所以传地址更好
标签:struct,int,笔记,C语言,char,Stu,初识,printf,结构 From: https://www.cnblogs.com/arongsec/p/17606279.html