天天看點

C語言學習—結構體與共用體

結構體

結構體的一般形式為:

struct 結構體名:用來辨別(zhì)一個結構體

{

成員清單:成員可以是任何c語言的資料類型

}; 注意:這裡一定要寫分号:因為聲明結構體也是一個c語言語句

聲明了一個結構體,相當于構造了一種新的資料類型,此時系統并不為它配置設定記憶體空間,隻有定義力結構體類型的變量,系統才為該變量配置設定記憶體空間,聲明了結構體後,就可以定義結構體類型的變量,定義

的一般形式為:

結構體名 變量名;

例如:struct person p1,p2;

這個是以person為資料類型,定義了兩個變量p1,p2;struct 為定義結構體變量的關鍵字.定義力結構圖變量後,系統會為他配置設定空間

位元組對齊:就是加快系統的通路效率

三種定義結構體的方法:

1

struct person 聲明了結構體名字

{

char name[20];

int age;

char sex;

char phone[15];

}p1,p2; 同時定義了兩個結構體變量

2

struct

{

char name[20];

int age;

char sex;

char phone[15];

}p1,p2; 這個隻是定義了兩個結構圖變量,但是沒有聲明結構體的名字

3 嵌套結構體

struct date

{

int year;

int monyh;

int day;

};

struct person

{

char name[20];

int age;

char sex;

char phone[15];

struct date brithday;

char *string;

}

總結:定義在前面的是結構體名字,在後面的是變量名字

引用和初始化結構體變量

一般的形式是:結構圖變量.成員名

例子:strcpy(p1.name,“John”);

p1.age=24;

.的作用:.是成員運算符,用于取得結構體中的成員,他在所有的運算符中 優先級最高

嵌套的初始化的方式:p1.birthday.year = 1985;//這裡的p1和birthday都是結構圖變量名

定義的同時進行初始化: struct person p2={“Bill”,22,‘m’,“987654321”};

注意:結構體中的變量成員也可以像其他的變量一樣進行各種初始化 p1.age++ //.的優先級是最高的

結構體和數組:結構體中可以有數組類型的成員,數組的元素也可以是結構體

例子:struct student s[2] ={ {1000,“zhang”,‘m’,21,“shanghai”}{10001,“li”,‘f’,20,“bei jing”}};

結構體和指針

結構體中各個成員按順序連讀存放在記憶體中,一個結構體指針指向結構體變量,結構體指針所儲存的是他指向的結構體變量所占記憶體的首位址

事例:

struct student s1;

struct student *p;

s1.number=10002;

s1.sex=‘m’;

s.age=22;

strcpy(s1.name,“Liu”);

strcpy(s1.addr,“Guang Dong”);

p=&s1;

printf("%d,%s,%c,%d,%s\n",p->number,p->sex,p->age,p->addr);

在c語言中為了友善使用和直覺,吧(*p).number改為p->number.這兩種寫法都是正确的,但是基本上使用的是第二種

文法: 指針->結構體成員

p->number++ 這個是可以的,因為->與.的結合性都是一樣高的,是以先與這兩個結合,取得number的值過後,然後再對這個值進行自加

++pp->number 這個的意思是:先得到number的值,然後再自加

原文連結:https://blog.csdn.net/weixin_51781547/article/details/112896495

結構體

結構體的一般形式為:

struct 結構體名:用來辨別(zhì)一個結構體

{

成員清單:成員可以是任何c語言的資料類型

}; 注意:這裡一定要寫分号:因為聲明結構體也是一個c語言語句

聲明了一個結構體,相當于構造了一種新的資料類型,此時系統并不為它配置設定記憶體空間,隻有定義力結構體類型的變量,系統才為該變量配置設定記憶體空間,聲明了結構體後,就可以定義結構體類型的變量,定義

的一般形式為:

結構體名 變量名;

例如:struct person p1,p2;

這個是以person為資料類型,定義了兩個變量p1,p2;struct 為定義結構體變量的關鍵字.定義力結構圖變量後,系統會為他配置設定空間

位元組對齊:就是加快系統的通路效率

三種定義結構體的方法:

1

struct person 聲明了結構體名字

{

char name[20];

int age;

char sex;

char phone[15];

}p1,p2; 同時定義了兩個結構體變量

2

struct

{

char name[20];

int age;

char sex;

char phone[15];

}p1,p2; 這個隻是定義了兩個結構圖變量,但是沒有聲明結構體的名字

3 嵌套結構體

struct date

{

int year;

int monyh;

int day;

};

struct person

{

char name[20];

int age;

char sex;

char phone[15];

struct date brithday;

char *string;

}

總結:定義在前面的是結構體名字,在後面的是變量名字

引用和初始化結構體變量

一般的形式是:結構圖變量.成員名

例子:strcpy(p1.name,“John”);

p1.age=24;

.的作用:.是成員運算符,用于取得結構體中的成員,他在所有的運算符中 優先級最高

嵌套的初始化的方式:p1.birthday.year = 1985;//這裡的p1和birthday都是結構圖變量名

定義的同時進行初始化: struct person p2={“Bill”,22,‘m’,“987654321”};

注意:結構體中的變量成員也可以像其他的變量一樣進行各種初始化 p1.age++ //.的優先級是最高的

結構體和數組:結構體中可以有數組類型的成員,數組的元素也可以是結構體

例子:struct student s[2] ={ {1000,“zhang”,‘m’,21,“shanghai”}{10001,“li”,‘f’,20,“bei jing”}};

結構體和指針

結構體中各個成員按順序連讀存放在記憶體中,一個結構體指針指向結構體變量,結構體指針所儲存的是他指向的結構體變量所占記憶體的首位址

事例:

struct student s1;

struct student *p;

s1.number=10002;

s1.sex=‘m’;

s.age=22;

strcpy(s1.name,“Liu”);

strcpy(s1.addr,“Guang Dong”);

p=&s1;

printf("%d,%s,%c,%d,%s\n",p->number,p->sex,p->age,p->addr);

在c語言中為了友善使用和直覺,吧(*p).number改為p->number.這兩種寫法都是正确的,但是基本上使用的是第二種

文法: 指針->結構體成員

p->number++ 這個是可以的,因為->與.的結合性都是一樣高的,是以先與這兩個結合,取得number的值過後,然後再對這個值進行自加

++pp->number 這個的意思是:先得到number的值,然後再自加

繼續閱讀