c语言结构体讲解,C语言基础之结构体讲解
結構體
結構體是一種數(shù)據結構。 int 、float等是基本數(shù)據結構。 數(shù)組也是一種數(shù)據結構,但是數(shù)組存放的數(shù)據類型比較單一,結構體解決了數(shù)組里不能存放多種類型數(shù)據的這種缺陷。
1、結構體的聲名
聲名時,不占空間,只是聲名了一種數(shù)據類型,定義時才分配空間
// struct聲名結構體是必須有,infor是該種結構體的類型名,可自定義。
struct infor
{
char a[10];
float b;
int c;
};
2、結構體的變量定義
struct infor stu; //定義時也要有struct。
struct infor2
{
char a[5];
float b;
int c;
}a, b[3], *c; //可以在聲明的同時定義變量。
//聲名結構體時沒有名字,聲名之后無法調用,只能聲名的同時定義變量,但編譯時不會報錯。
struct
{
int a;
float b;
char c;
}s;
//可以用typedef重命名類型以方便定義變量
//在聲明時使用typdef,不寫變量名也可使用
typedef struct
{
int a;
float b;
char c;
}S, *p_S;
//S是該類型結構體的新類型名,p_S是指向該類型變量的指針的類型名
S a;
p_S p;
3、結構體變量的初始化
struct infor
{
char a[50];
char b;
int c;
};
struct infor s1 = {"abc", 1};
//初始化時按成員順序賦值,不完全初始化時補0.
//a[0] = 'a', a[1] = 'b', a[2] = 'c', 其余為0;
struct infor s2 = {.a="qew", .b=15}; //單獨初始化
struct infor s3 = {.a=27, .a="qew"}; //單獨初始化時,后者可以將前者覆蓋。
struct infor *p_s = &s1;
4、結構體成員的賦值及調用
普通結構體變量取成員用 ‘.’ 運算符。 結構體指針取成員需要用 ‘->’ 運算符(類似于解引用)。
struct infor
{
char a[50];
char b;
int c;
};
struct infor s1 = {"abc", 1};
struct infor s2 = {.a=27, .a="qew"};
struct infor *p_s = &s1;
//初始化之后賦值就必須對成員單獨一一賦值了。
s1.b = 18;
p_stu -> c = 16;
5、結構體的內存對齊原則
結構體的起始地址默認為4的整數(shù)倍,當結構體內 占內存最多的成員 所占字節(jié)數(shù)size小于4時,起始地址為size的整數(shù)倍
即結構體內占內存最大的成員是short時,
起始地址為2的整數(shù)倍(2<4,所以取2)。 結構體內占內存最大的成員是double時,
起始地址為4的整數(shù)倍(8>4,所以取默認值4)。 各成員的首地址均為自身所占內存的整數(shù)倍,所以就有了內存補齊原則
struct str1 // 7個字節(jié)有效數(shù)據
{
int a; // 4,int類型從地址是4的倍數(shù)處開始存儲
char b; // 1
// 1 填充了1字節(jié)空間
short c; // 2,short類型從地址是2的倍數(shù)處開始存儲
}s1; // 8
struct str2
{
char a; // 1
char b; // 1
// + 2 填充了2字節(jié)空間
int c; // 4
}s2; // 8
struct str3 // 6
{
int a;
char b;
char c;
// + 2 填充了2字節(jié)空間
}s3; // 8
struct str4 // 10
{
struct str1 s; // 8
char a; // 1 + 3 填充了3字節(jié)空間,因為struct str1中有int類型,所以要補齊4個字節(jié)。
}s4; // 12
struct str5 // 10
{
short a[4]; // 8
char b; // 1 + 1 填充了1字節(jié)空間
}s4; // 10
總結
以上是生活随笔為你收集整理的c语言结构体讲解,C语言基础之结构体讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 switch语句大小,C语言sw
- 下一篇: 算法导论中C语言代码,算法导论-学习笔记