c语言之——结构体(一)

一、什么是结构体

结构体(struct)是由一系列具有相同或不同类型的数据构成的数据集合,是一种特殊的数据类型。区别与数组的是,数组内部是相同类型的数据。

二、如何使用结构体

#include<stdio.h>
 
//定义一种数据类型
struct Student
{	
	int sid;
	char name[200];
	int age;
}; //分号不能省
 
int main(void)
{
    struct Student st = {1000, "zhangsan", 20};// 定义结构体变量的同时初始化
    
    st.sid = 99;  //第一种方式
	//st.name = "lisi";  //error
	strcpy(st.name, "lisi");//只能使用strcpy函数为字符数组整体赋值

    struct Student * pst;
	pst = &st;
	pst->sid = 99;  //第二种方式  pst->sid 等价于 (*pst).sid  而(*pst).sid等价于 st.sid,  所以pst->sid 等价于 st.sid
 
    return 0;
}

访问结构体成员内部变量有两种方式:

  • 通过结构体指针:结构体指针变量名->成员
  • 通过结构体名:结构体.成员

也可以使用typedef关键字重命名结构体:

typedef struct teacher
{
	char name[20];
	int age;
	int mager;
}teacher_t


teacher_t teacher;

 

三、 结构体变量的运算 

    相同结构体的不同变量只保留了赋值运算符

    st1 = st2

四、 结构体变量作为函数的形参与结构体指针作为函数的形参

(1)结构体变量作为函数形参的时候,实际上和普通变量(类似于int之类的)传参时表现是一模一样的。所以说结构体变量其实也是普通变量而已。

(2)因为结构体一般都很大,所以如果直接用结构体变量进行传参,那么函数调用效率就会很低。(因为在函数传参的时候需要将实参赋值给形参,所以当传参的变量越大调用效率就会越低)。怎么解决?思路只有一个那就是不要传变量了,改传变量的指针(地址)进去。

# include <stdio.h>
# include <string.h>

struct Student
{	
	int sid;
	char name[200];
	int age;
}; //分号不能省

void f(struct Student * pst);
void g(struct Student st);
void g2(struct Student *pst);

int main(void)
{
	struct Student st;  //已经为st分配好了内存

	f(&st);
	g2(&st);

	//printf("%d %s %d\n", st.sid, st.name, st.age);

	return 0;
}

//这种方式耗内存 耗时间 不推荐
void g(struct Student st)
{
	printf("%d %s %d\n", st.sid, st.name, st.age);	
}

void g2(struct Student *pst)
{
	printf("%d %s %d\n", pst->sid, pst->name, pst->age);	
}

void f(struct Student * pst)
{
	(*pst).sid = 99;
	strcpy(pst->name, "zhangsan");
	pst->age = 22;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值