C語言結構體專題
1大綱
01、結構體型別定義及結構體變數定義
char c1,char c2, char name[62]; int age
char name[62]; int age,char c1,char c2
結構體變數的引用 .
結構體變數的指標 ->
02、結構體做函式引數
結構體賦值編譯器行為研究
結構體變數做函式引數 PK 結構體指標做函式引數
結構體做函式引數(//結構體賦值和實參形參賦值行為研究)
記憶體四區呼叫圖畫法
//從鍵盤獲取資料,給結構體變數初始化,並排序,列印結構體
stack上分配結構陣列和heap上分配結構體陣列
03、工程開發中,結構體開發的常見模型及典型錯誤用法
結構體巢狀一級指標
結構體巢狀二級指標
04、結構體中的深拷貝淺拷貝
問題丟擲
解決方法
2結構體型別定義及變數定義
/*
//結構體型別定義及結構體變數定義
結構體是一種構造資料型別
用途:把不同型別的資料組合成一個整體-------自定義資料型別
結構體型別定義
*/
//宣告一個結構體型別
struct _Teacher
{
char name[32];
char tile[32];
int age;
char addr[128];
};
//定義結構體變數的方法
/*
1)定義型別 用型別定義變數
2)定義型別的同時,定義變數;
3)直接定義結構體變數;
*/
struct _Student
{
char name[32];
char tile[32];
int age;
char addr[128];
}s1, s2; //定義型別的同時,定義變數;
struct
{
char name[32];
char tile[32];
int age;
char addr[128];
}s3,s4; //直接定義結構體變數
//初始化結構體變數的幾種方法
//1)
struct _Teacher t4 = {“name2”, “tile2”, 2, “addr2”};
//2)
struct Dog1
{
char name[32];
char tile[32];
int age;
char addr[128];
}d5 = {“dog”, “gongzhu”, 1, “ddd”};
//3)
struct
{
char name[32];
char tile[32];
int age;
char addr[128];
}d6 = {“dog”, “gongzhu”, 1, “ddd”};
//結構體變數的引用
int main11()
{
//struct _Teacher t1, t2;
//定義同時初始化
{
struct _Teacher t3 = {“name2”, “tile2”, 2, “addr2”};
printf("%s\n", t3.name);
printf("%s\n", t3.tile);
}
//用指標法和變數法分別操作結構體
{
struct _Teacher t4;
struct _Teacher *pTeacher = NULL;
pTeacher = &t4;
strcpy(t4.name, “wangbaoming”);
strcpy(pTeacher->addr, “ddddd”);
printf(“t4.name:%s\n”, t4.name);
}
printf(“hello…\n”);
getchar();
return 0;
}
3結構體做函式引數及結構體陣列
//測試兩個結構體變數之間可以copy資料嗎?
//t2 = t1;
//測試實參傳給形參,編譯器的行為
//結果很出人意外
//宣告一個結構體型別
struct _MyTeacher
{
char name[32];
char tile[32];
int age;
char addr[128];
};
void printfMyteach01(struct _MyTeacher t)
{
printf("\nt.name:%s", t.name);
}
void printfMyteach02(struct _MyTeacher *t)
{
printf("\nt->name:%s", t->name);
}
//結構體賦值和實參形參賦值行為研究
int main21()
{
struct _MyTeacher t1, t2;
memset(&t1, 0, sizeof(t1));
strcpy(t1.name, “name”);
strcpy(t1.addr, “addr”);
strcpy(t1.tile, “addr”);
t1.age = 1;
//測試兩個結構體變數之間可以copy資料嗎?
//t2 = t1;
//測試實參傳給形參,編譯器的行為
//結果很出人意外
printfMyteach01(t1);
printfMyteach02(&t1);
getchar();
return 0;
}
//定義結構體陣列
int main22()
{
int i = 0;
struct _MyTeacher teaArray[3];
struct _MyTeacher *tmp = NULL;
for (i=0; i<3; i++)
{
strcpy(teaArray[i].name, “aaaaa”);
//printf("%s", teaArray[i].name);
tmp = &teaArray[i];
printf("%s", tmp->name);
}
getchar();
return 0;
}
例子
從鍵盤接受資料。。。。並排序
int printfArray(struct _MyTeacher *teaArray, int count)
{
int i = 0;
//列印
for (i=0; i<count; i++)
{
printf("\n教師名字:");
printf("%s", teaArray[i].name);
printf("\n教師年齡:");
printf("%d", teaArray[i].age);
}
}
int main23()
{
int i = 0, j = 0;
struct _MyTeacher teaArray[3];
struct _MyTeacher tmp;
for (i=0; i<3; i++)
{
printf("\n請鍵入教師名字:");
scanf("%s", teaArray[i].name);
printf("\n請鍵入教師年齡:");
scanf("%d", &teaArray[i].age);
}
for (i=0; i<3; i++)
{
for (j=i+1; j<3; j++)
{
if (teaArray[i].age >teaArray[j].age)
{
tmp = teaArray[i];
teaArray[i] = teaArray[j];
teaArray[j] = tmp;
}
}
}
//列印
for (i=0; i<3; i++)
{
printf("\n教師名字:");
printf("%s", teaArray[i].name);
printf("\n教師年齡:");
printf("%d", teaArray[i].age);
}
printf(“ddddd\n”);
printfArray(teaArray, 3);
system(“pause”);
}
4結構體在工程開發中的應用
//測試輸入
//測試列印
//測試malloc
//測試typdef用法
//定義結構體陣列
struct _Student
{
char name[32];
char tile[32];
};
//宣告一個結構體型別
struct _itTeacher
{
char name[32];
char tile[32];
int age;
char addr[128];
};
struct _itAdvTeacher
{
char *name;
char *tile;
int age;
char *addr;
char *p1;
char **p2;
};
//測試輸入
//測試列印
//測試malloc
//測試typdef用法
//定義結構體陣列
int main()
{
int i = 0;
struct _itTeacher teaArray[3];
struct _itTeacher *tmp = NULL;
for (i=0; i<3; i++)
{
strcpy(teaArray[i].name, “aaaaa”);
//printf("%s", teaArray[i].name);
tmp = &teaArray[i];
printf("%s", tmp->name);
}
getchar();
return 0;
}
//記憶體四位元組對齊
//結構體實參傳給形參,也是一個值copy,相當於t1 = t2;
//兩個結構體變數之間確實是可以copy,這個是編譯器的行為,我們需要順從
相關文章
- C語言(結構體)C語言結構體
- C 語言結構體記憶體佈局問題結構體記憶體
- C語言結構體記憶體佈局問題C語言結構體記憶體
- C語言-->(十四)結構體、巨集、編譯C語言結構體編譯
- C語言結構體作為形參C語言結構體
- C語言_瞭解下結構體指標C語言結構體指標
- 關於C語言結構體對齊問題的探討C語言結構體
- C語言教程——03 C語言結構C語言
- C 語言結構體的對齊原則結構體
- Go 語言 結構體Go結構體
- C語言-選擇結構C語言
- C語言 第八章 結構體與共用體 重點 典型題C語言結構體
- C語言騷操作:結構體初始化方法C語言結構體
- 失落的C語言結構體封裝藝術C語言結構體封裝
- “c語言+結構體+連結串列”實現名片系統C語言結構體
- C語言之結構體C語言結構體
- C語言結構體大小分析C語言結構體
- Go 語言 結構體連結串列Go結構體
- C語言學習筆記:結構體與指標C語言筆記結構體指標
- Go 語言 結構體和方法Go結構體
- go語言學習-結構體Go結構體
- C語言中結構體感悟C語言結構體
- C++語法-結構體C++結構體
- C語言兩結構體之間的成員互換C語言結構體
- 如何系統學習C 語言(中)之 結構體篇結構體
- C語言中結構體struct的對齊問題C語言結構體Struct
- 資料結構雜湊表(c語言)資料結構C語言
- 資料結構 順序棧(c語言)資料結構C語言
- c語言基礎筆記DAY7_結構體共用體列舉C語言筆記結構體
- c語言圖書館管理系統----學會使用結構體C語言結構體
- Android NDK開發之旅5 C語言基礎 結構體AndroidC語言結構體
- 關於C語言結構體賦值(linux核心風格)C語言結構體賦值Linux
- 深入體驗C語言專案開發C語言
- C語言語句知識結構大學霸IT達人C語言
- C語言語法文字結構—接近完整版本C語言
- c語言資料結構補齊原則C語言資料結構
- 資料結構C語言|佇列相關資料結構C語言佇列
- C語言開發windows程式主要程式結構C語言Windows