結構體
結構體的一般形式為:
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的值,然後再自加