C语言初阶-结构体
作者:互联网
C语言初阶之结构体
前言
本文主要为结构体。
一、结构体的声明
1.结构的基础知识
数组:是一组相同类型元素的集合。
结构:是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量。
2.结构的声明
定义方式:
struct tag
{
member-list;
}variable-list;
例:
typedef struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
}Stu;//分号不能丢,Stu是结构体创建的变量
3.结构成员的类型
结构的成员可以是标量、数组、指针,甚至是其他结构体。
4.结构体变量的定义和初始化
结构体变量的定义和初始化:
//声明类型的同时定义变量
struct Point //类型声明
{
int x;
char y;
}p1;
//定义结构体变量
struct Point p2;
//初始化:定义变量的同时赋初值
struct Point p3 = {x,"y"};
//结构体嵌套初始化
struct Node
{
int data;
struct Point p;
struct Node* next;
}n1 = {10, {4,5}, NULL};
struct Node n2 = {20, {5, 6}, NULL};
例:
#include <stdio.h>
#include <stdlib.h>
struct X
{
char a;
int b;
};
struct Stu //类型
{
//结构的成员变量
struct X x;
char name[20];//名字
int age;//年龄
char id[20];
}s1,s2;//结构体创建的全局变量
int main()
{
struct Stu s = {{'x',2},"Wolverine",18,"123456"}; //局部变量(拿类型创建对象)
printf("%c\n",s.x.a);
printf("%s\n",s.id);
struct Stu* ps = &s;
printf("%c\n",(*ps).x.a);
printf("%c\n",ps->x.a);
return 0;
}
二、结构体成员的访问
- 结构体变量访问成员
结构变量的成员是通过点操作符.
访问的,点操作符接受两个操作数。
例:
#include <stdio.h>
#include <stdlib.h>
struct X
{
char a;
};
struct Stu
{
struct X x;
char name[20];
};
int main()
{
struct Stu s = {{'x'},"Wolverine"};
printf("%c\n",s.x.a);
printf("%s\n",s.name);
return 0;
}
- 结构体指针访问指向变量的成员
有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。
例:
#include <stdio.h>
#include <stdlib.h>
struct X
{
char a;
};
struct Stu
{
struct X x;
char name[20];
};
int main()
{
struct Stu s = {{'x'},"Wolverine"};
struct Stu* ps = &s;
printf("%c\n",(*ps).x.a);
printf("%c\n",ps->x.a);
return 0;
}
三、结构体传参
代码:
#include <stdio.h>
#include <stdlib.h>
struct S
{
int data[10];
int num;
};
//结构体传参
void print1(struct S t)
{
printf("%d\n", t.num);
}
//结构体地址传参
void print2(struct S* ps)
{
printf("%d\n", ps->num);
}
int main()
{
struct S s = {{1,2,3}, 5};
print1(s); //传值调用
print2(&s); //传址调用
return 0;
}
注:结构体传参的时候,要传结构体的地址。
原因:函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。
函数调用的参数压栈
栈:是一种数据结构,先进的后出,后进的先出
例:
#include <stdio.h>
#include <stdlib.h>
int Add(int x, int y)
{
int z = 0;
z = x + y;
return 0;
}
int main()
{
int a = 1;
int b = 2;
int c = 0;
c = Add(a,b);
return 0;
}
结尾
标签:初阶,struct,int,C语言,char,Stu,include,结构 来源: https://www.cnblogs.com/yjlin/p/16561988.html