準備工作之結構體[基于郝斌課程]
為什么會出現結構體
??為了表示一些復雜的數據,而普通的基本類型變量無法滿足要求
什么叫結構體
??結構體是用戶根據實際需要自己定義的復合數據類型
如何使用結構體
普通結構體變量.成員變量
/*
@file main.c
@brief 數據結構預備知識之結構體學習
@author EricsT (EricsT@163.com)
@version v1.0.0
@date 2025-09-09
@history 2025-09-09 EricsT - 新建文件
*/
#include <stdio.h>
#include <string.h>
struct Student//定義一個數據類型
{
int sid;//結構體成員
char name[200];
int age;
};//該處分號不能省略
int main(void)
{
Student st = { 1000, "zhangsan", 20 };//結構體變量
printf("%d %s %d\n", st.sid, st.name, st.age);
st.sid = 99;
strcpy(st.name, "lisi");//st.name = "lisi"
st.age = 22;
printf("%d %s %d\n", st.sid, st.name, st.age);
return 0;
}
結構體指針變量->成員變量
/*
@file main.c
@brief 數據結構預備知識之結構體指針
@author EricsT (EricsT@163.com)
@version v1.0.0
@date 2025-09-09
@history 2025-09-09 EricsT - 新建文件
*/
#include <stdio.h>
struct Student//定義一個數據類型
{
int sid;//結構體成員
char name[200];
int age;
};//該處分號不能省略
int main(void)
{
Student st = { 1000, "zhangsan", 20 };//結構體變量
Student* pst;//結構體指針
pst = &st;
pst->sid = 99;//pst->sid等價于(*pst).sid等價于st.sid
return 0;
}
pst->sid[表示pst所指向的結構體變量中的sid這個成員]
注意事項
結構體變量不能加減乘除,但是可以相互賦值
普通結構體變量和結構體指針變量作為函數傳參的問題
/*
@file main.c
@brief 數據結構預備知識之結構體與函數
@author EricsT (EricsT@163.com)
@version v1.0.0
@date 2025-09-09
@history 2025-09-09 EricsT - 新建文件
*/
#include <stdio.h>
#include <string.h>
struct Student//定義一個數據類型
{
int sid;//結構體成員
char name[200];
int age;
};//該處分號不能省略
void f(Student* pst)
{
(*pst).sid = 99;
strcpy(pst->name, "zhangsan");
pst->age = 20;
}
//此時傳數據,會把st整體傳進來,意味著需要傳Student大小過去
//耗時耗內存
void g(Student st)
{
printf("%d %s %d\n", st.age, st.name, st.sid);
}
//此時只傳遞了4個字節,但是可以訪問整個結構體
void h(Student* pst)
{
printf("%d %s %d\n", pst->age, pst->name, pst->sid);
}
int main()
{
Student st;//此時已在內存中給其分配內存空間,由于未初始化,所以該塊內存中的值是隨機值
f(&st);
g(st);
h(&st);
return 0;
}
本文來自博客園,作者:EricsT,轉載請注明原文鏈接:http://www.rzrgm.cn/EricsT/p/19082822

浙公網安備 33010602011771號