日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言结构体的位操作,C语言之路---结构体、位运算及预处理命令

發(fā)布時間:2024/4/18 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言结构体的位操作,C语言之路---结构体、位运算及预处理命令 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、結(jié)構(gòu)體

1)、概念

結(jié)構(gòu)體是一種集合,它里面包含了多個變量或數(shù)組,它們的類型可以相同,也可以不同,每個這樣的變量或數(shù)組都稱為結(jié)構(gòu)體的成員(Member)。

結(jié)構(gòu)體也是一種數(shù)據(jù)類型,它由程序員自己定義,可以包含多個其他類型的數(shù)據(jù)。

像 int、float、char 等是由C語言本身提供的數(shù)據(jù)類型,不能再進(jìn)行分拆,我們稱之為基本數(shù)據(jù)類型;而結(jié)構(gòu)體可以包含多個基本類型的數(shù)據(jù),也可以包含其他的結(jié)構(gòu)體,我們將它稱為復(fù)雜數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型。

在C語言中,可以使用結(jié)構(gòu)體(Struct)來存放一組不同類型的數(shù)據(jù)。結(jié)構(gòu)體的定義形式為:

struct 結(jié)構(gòu)體名{

結(jié)構(gòu)體所包含的變量或數(shù)組

};

struct stu{

char *name; //姓名

int num; //學(xué)號

int age; //年齡

char group; //所在學(xué)習(xí)小組

float score; //成績

};

注意大括號后面的分號;不能少,這是一條完整的語句。

stu 為結(jié)構(gòu)體名,它包含了 5 個成員,分別是 name、num、age、group、score。結(jié)構(gòu)體成員的定義方式與變量和數(shù)組的定義方式相同,只是不能初始化。

成員的獲取和賦值

,結(jié)構(gòu)體使用點(diǎn)號.獲取單個成員。獲取結(jié)構(gòu)體成員的一般格式為:

結(jié)構(gòu)體變量名.成員名;

需要注意的是,結(jié)構(gòu)體是一種自定義的數(shù)據(jù)類型,是創(chuàng)建變量的模板,不占用內(nèi)存空間;結(jié)構(gòu)體變量才包含了實(shí)實(shí)在在的數(shù)據(jù),需要內(nèi)存空間來存儲。

2)、結(jié)構(gòu)體變量

結(jié)構(gòu)體和結(jié)構(gòu)體變量是兩個不同的概念:結(jié)構(gòu)體是一種數(shù)據(jù)類型,是一種創(chuàng)建變量的模板,編譯器不會為它分配內(nèi)存空間,就像 int、float、char 這些關(guān)鍵字本身不占用內(nèi)存一樣;結(jié)構(gòu)體變量才包含實(shí)實(shí)在在的數(shù)據(jù),才需要內(nèi)存來存儲。

3)、結(jié)構(gòu)體數(shù)組

4)、結(jié)構(gòu)體和指針

指針也可以指向一個結(jié)構(gòu)體,定義的形式一般為:

struct 結(jié)構(gòu)體名 *變量名;

獲取結(jié)構(gòu)體成員

通過結(jié)構(gòu)體指針可以獲取結(jié)構(gòu)體成員,一般形式為:

(*pointer).memberName

或者:

pointer->memberName

第一種寫法中,.的優(yōu)先級高于*,(*pointer)兩邊的括號不能少。如果去掉括號寫作*pointer.memberName,那么就等效于*(pointer.memberName),這樣意義就完全不對了。

第二種寫法中,->是一個新的運(yùn)算符,習(xí)慣稱它為“箭頭”,有了它,可以通過結(jié)構(gòu)體指針直接取得結(jié)構(gòu)體成員;這也是->在C語言中的唯一用途。

上面的兩種寫法是等效的,我們通常采用后面的寫法,這樣更加直觀。

#include

int main(){

struct{

char *name; //姓名

int num; //學(xué)號

int age; //年齡

char group; //所在小組

float score; //成績

} stu1 = { "Tom", 12, 18, 'A', 136.5 }, *pstu = &stu1;

//讀取結(jié)構(gòu)體成員的值

printf("%s的學(xué)號是%d,年齡是%d,在%c組,今年的成績是%.1f!\n", (*pstu).name, (*pstu).num, (*pstu).age, (*pstu).group, (*pstu).score);

printf("%s的學(xué)號是%d,年齡是%d,在%c組,今年的成績是%.1f!\n", pstu->name, pstu->num, pstu->age, pstu->group, pstu->score);

return 0;

}

運(yùn)行結(jié)果:

Tom的學(xué)號是12,年齡是18,在A組,今年的成績是136.5!

Tom的學(xué)號是12,年齡是18,在A組,今年的成績是136.5!

【示例】結(jié)構(gòu)體數(shù)組指針的使用。

#include

struct stu{

char *name; //姓名

int num; //學(xué)號

int age; //年齡

char group; //所在小組

float score; //成績

}stus[] = {

{"Zhou ping", 5, 18, 'C', 145.0},

{"Zhang ping", 4, 19, 'A', 130.5},

{"Liu fang", 1, 18, 'A', 148.5},

{"Cheng ling", 2, 17, 'F', 139.0},

{"Wang ming", 3, 17, 'B', 144.5}

}, *ps;

int main(){

//求數(shù)組長度

int len = sizeof(stus) / sizeof(struct stu);

printf("Name\t\tNum\tAge\tGroup\tScore\t\n");

for(ps=stus; ps

printf("%s\t%d\t%d\t%c\t%.1f\n", ps->name, ps->num, ps->age, ps->group, ps->score);

}

return 0;

}

運(yùn)行結(jié)果:

Name Num Age Group Score

Zhou ping 5 18 C 145.0

Zhang ping 4 19 A 130.5

Liu fang 1 18 A 148.5

Cheng ling 2 17 F 139.0

Wang ming 3 17 B 144.5

二、枚舉類型(enum)

三、共用體(union)

四、C語言中位運(yùn)算

五、typedef給類型起個別名

typedef 是賦予現(xiàn)有類型一個新的名字,而不是創(chuàng)建新的類型。為了“見名知意”,請盡量使用含義明確的標(biāo)識符,并且盡量大寫。

typedef 在表現(xiàn)上有時候類似于 #define,但它和宏替換之間存在一個關(guān)鍵性的區(qū)別。正確思考這個問題的方法就是把 typedef 看成一種徹底的“封裝”類型,聲明之后不能再往里面增加別的東西。

typedef 和 #define 的區(qū)別

typedef 在表現(xiàn)上有時候類似于 #define,但它和宏替換之間存在一個關(guān)鍵性的區(qū)別。正確思考這個問題的方法就是把 typedef 看成一種徹底的“封裝”類型,聲明之后不能再往里面增加別的東西。

六、C語言中const:禁止修改變量的值

將 const 變量稱為常量(Constant)。創(chuàng)建常量的格式通常為:

const type name = value;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?const int Mac=100;? ? ? ? ? ? ?首選

const 和 type 都是用來修飾變量的,它們的位置可以互換,也就是將 type 放在 const 前面:

type const name = value;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int? const Mac=100;

但我們通常采用第一種方式,不采用第二種方式。另外建議將常量名的首字母大寫,以提醒程序員這是個常量。

const 和指針

const 離變量名近就是用來修飾指針變量的,離變量名遠(yuǎn)就是用來修飾指針指向的數(shù)據(jù),如果近的和遠(yuǎn)的都有,那么就同時修飾指針變量以及它指向的數(shù)據(jù)

const 和函數(shù)形參

const 通常用在函數(shù)形參中,如果形參是一個指針,為了防止在函數(shù)內(nèi)部修改指針指向的數(shù)據(jù),就可以用 const 來限制。

總結(jié)

以上是生活随笔為你收集整理的c语言结构体的位操作,C语言之路---结构体、位运算及预处理命令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。