第一篇:C語(yǔ)言中如何定義一個(gè)結(jié)構(gòu)能包含指向自己的指針
C語(yǔ)言中如何定義一個(gè)結(jié)構(gòu)能包含指向自己的指針
C 語(yǔ)言中的結(jié)構(gòu)當(dāng)然可以包含指向自己的指針;[K&R2, 第6.5 節(jié)] 的討論和例子表明了這點(diǎn)。NODEPTR 例子的問題是在聲明next 域的時(shí)候typedef 還沒有定義。為了解決這個(gè)問題,首先賦予這個(gè)結(jié)構(gòu)一個(gè)標(biāo)簽(“struct node”)。然后,聲明“next” 域?yàn)椤皊truct node *”, 或者分開typedef 定義和結(jié)構(gòu)定義, 或者兩者都采納。以下是一個(gè)修改后的版本:
struct node{
char *item;
struct node *next;
};
typedef struct node *NODEPTR;
至少還有三種同樣正確的方法解決這個(gè)問題。
在用typedef 定義互相引用的兩個(gè)結(jié)構(gòu)時(shí)也會(huì)產(chǎn)生類似的問題, 可以用同樣的方法解決。
第二篇:C語(yǔ)言指向結(jié)構(gòu)體數(shù)組的指針
C語(yǔ)言指向結(jié)構(gòu)體數(shù)組的指針
指針變量可以指向一個(gè)結(jié)構(gòu)數(shù)組,這時(shí)結(jié)構(gòu)指針變量的值是整個(gè)結(jié)構(gòu)數(shù)組的首地址。結(jié)構(gòu)指針變量也可指向結(jié)構(gòu)數(shù)組的一個(gè)元素,這時(shí)結(jié)構(gòu)指針變量的值是該結(jié)構(gòu)數(shù)組元素的首地址。
設(shè)ps為指向結(jié)構(gòu)數(shù)組的指針變量,則ps也指向該結(jié)構(gòu)數(shù)組的0號(hào)元素,ps+1指向1號(hào)元素,ps+i則指向i號(hào)元素。這與普通數(shù)組的情況現(xiàn)金網(wǎng)96y.org是一致的。
用指針變量輸出結(jié)構(gòu)數(shù)組。
struct stu{
int num;
char *name;
char sex;
float score;
}boy[5]={
{101,Zhou ping,M,45},{102,Zhang ping,M,62.5},{103,Liou fang,F,92.5},{104,Cheng ling,F,87},{105,Wang ming,M,58}
};
main(){
struct stu *ps;
printf(NotNametttSextScoretn);
for(ps=boy;psboy+5;ps++)
printf(%dt%stt%ct%ftn,ps-num,ps-name,ps-sex,ps-score);
}
在程序中,定義了stu結(jié)構(gòu)類型的外部數(shù)組boy并作了初始化賦值。在main函數(shù)內(nèi)定義ps為指向stu類型的指針。在循環(huán)語(yǔ)句for的表達(dá)式1中,ps被賦予boy的首地址,然后循環(huán)5次,輸出boy數(shù)組中各成員值。
應(yīng)該注意的是,一個(gè)結(jié)構(gòu)指針變量雖然可以用來(lái)訪問結(jié)構(gòu)變量或結(jié)構(gòu)數(shù)組元素的成員,但是,不能博彩公司排名q07i5.org使它指向一個(gè)成員。也就是說(shuō)不允許取一個(gè)成員的地址來(lái)賦予它。因此,下面的賦值是錯(cuò)誤的。
ps=boy[1].sex;
而只能是:
ps=boy;(賦予數(shù)組首地址)
或者是:
ps=boy[0];(賦予0號(hào)元素首地址)
第三篇:C語(yǔ)言中結(jié)構(gòu)體的使用
腳踏實(shí)地,心無(wú)旁騖,珍惜分分秒秒。緊跟老師,夯實(shí)基礎(chǔ)。什么是結(jié)構(gòu)體?
簡(jiǎn)單的來(lái)說(shuō)
結(jié)構(gòu)體就是一個(gè)可以包含不同數(shù)據(jù)類型的一個(gè)結(jié)構(gòu) 它是一種可以自己定義的數(shù)據(jù)類型 它的特點(diǎn)和數(shù)組主要有兩點(diǎn)不同
首先結(jié)構(gòu)體可以在一個(gè)結(jié)構(gòu)中聲明不同的數(shù)據(jù)類型 第二相同結(jié)構(gòu)的結(jié)構(gòu)體變量是可以相互賦值的 而數(shù)組是做不到的
因?yàn)閿?shù)組是單一數(shù)據(jù)類型的數(shù)據(jù)集合 它本身不是數(shù)據(jù)類型(而結(jié)構(gòu)體是)數(shù)組名稱是常量指針
所以不可以做為左值進(jìn)行運(yùn)算
所以數(shù)組之間就不能通過(guò)數(shù)組名稱相互復(fù)制了 即使數(shù)據(jù)類型和數(shù)組大小完全相同
定義結(jié)構(gòu)體使用struct修飾符 例如:
struct test { float a;int b;};
上面的代碼就定義了一個(gè)名為test的結(jié)構(gòu)體 它的數(shù)據(jù)類型就是test 它包含兩個(gè)成員a和b 成員a的數(shù)據(jù)類型為浮點(diǎn)型 成員b的數(shù)據(jù)類型為整型
由于結(jié)構(gòu)體本身就是自定義的數(shù)據(jù)類型
定義結(jié)構(gòu)體變量的方法和定義普通變量的方法一樣
test pn1;
這樣就定義了一test結(jié)構(gòu)體數(shù)據(jù)類型的結(jié)構(gòu)體變量pn1 結(jié)構(gòu)體成員的訪問通過(guò)點(diǎn)操作符進(jìn)行
pn1.a=10 就對(duì)結(jié)構(gòu)體變量pn1的成員a進(jìn)行了賦值操作
注意:結(jié)構(gòu)體生命的時(shí)候本身不占用任何內(nèi)存空間
只有當(dāng)你用你定義的結(jié)構(gòu)體類型定義結(jié)構(gòu)體變量的時(shí)候計(jì)算機(jī)才會(huì)分配內(nèi)存
結(jié)構(gòu)體
同樣是可以定義指針的
那么結(jié)構(gòu)體指針就叫做結(jié)構(gòu)指針
結(jié)構(gòu)指針通過(guò)->符號(hào)來(lái)訪問成員
下面我們就以上所說(shuō)的看一個(gè)完整的例子: #include
struct test//定義一個(gè)名為test的結(jié)構(gòu)體 { int a;//定義結(jié)構(gòu)體成員a int b;//定義結(jié)構(gòu)體成員b };
void main(){ test pn1;//定義結(jié)構(gòu)體變量pn1 test pn2;//定義結(jié)構(gòu)體變量pn2
pn2.a=10;//通過(guò)成員操作符.給結(jié)構(gòu)體變量pn2中的成員a賦值 pn2.b=3;//通過(guò)成員操作符.給結(jié)構(gòu)體變量pn2中的成員b賦值
pn1=pn2;//把pn2中所有的成員值復(fù)制給具有相同結(jié)構(gòu)的結(jié)構(gòu)體變量pn1 cout<
test *point;//定義結(jié)構(gòu)指針
point=&pn2;//指針指向結(jié)構(gòu)體變量pn2的內(nèi)存地址 cout<
a=99;//通過(guò)結(jié)構(gòu)指針修改結(jié)構(gòu)體變量pn2成員a的值 cout<
a<<“|”<
b< 總之 結(jié)構(gòu)體可以描述數(shù)組不能夠清晰描述的結(jié)構(gòu) 它具有數(shù)組所不具備的一些功能特性 下面我們來(lái)看一下 結(jié)構(gòu)體變量是如何作為函數(shù)參數(shù)進(jìn)行傳遞的 #include struct test { char name[10];float socre;}; void print_score(test pn)//以結(jié)構(gòu)變量進(jìn)行傳遞 { cout< void print_score(test *pn)//一結(jié)構(gòu)指針作為形參 { cout< name<<“|”< socre< void main(){ test a[2]={{“marry” 88.5} {“jarck” 98.5}};int num = sizeof(a)/sizeof(test);for(int i=0;i void print_score(test *pn)的效率是要高過(guò)void print_score(test pn)的 因?yàn)橹苯觾?nèi)存操作避免了??臻g開辟結(jié)構(gòu)變量空間需求 節(jié)省內(nèi)存 下面我們?cè)僬f(shuō)一下 傳遞結(jié)構(gòu)引用的例子 利用引用傳遞的好處很多 它的效率和指針相差無(wú)幾 但引用的操作方式和值傳遞幾乎一樣 種種優(yōu)勢(shì)都說(shuō)明善用引用可以做到程序的易讀和易操作 它的優(yōu)勢(shì)尤其在結(jié)構(gòu)和大的時(shí)候 避免傳遞結(jié)構(gòu)變量很大的值 節(jié)省內(nèi)存 提高效率 #include struct test { char name[10];float socre;}; void print_score(test &pn)//以結(jié)構(gòu)變量進(jìn)行傳遞 { cout< void main(){ test a[2]={{“marry” 88.5} {“jarck” 98.5}};int num = sizeof(a)/sizeof(test);for(int i=0;i #include struct test { char name[10];float socre;}; void print_score(test &pn){ cout< test get_score(){ test pn;cin>>pn.name>>pn.socre;return pn;} void main(){ test a[2];int num = sizeof(a)/sizeof(test);for(int i=0;i //------例程2-- #include struct test { char name[10];float socre;}; void print_score(test &pn){ cout< void get_score(test &pn){ cin>>pn.name>>pn.socre;} void main(){ test a[2];int num = sizeof(a)/sizeof(test);for(int i=0;i 第一: 例程1中的 test get_score(){ test pn;cin>>pn.name>>pn.socre;return pn;} 調(diào)用的時(shí)候在內(nèi)部要在??臻g開辟一個(gè)名為pn的結(jié)構(gòu)體變量 程序pn的時(shí)候又再次在棧內(nèi)存空間內(nèi)自動(dòng)生成了一個(gè)臨時(shí)結(jié)構(gòu)體變量temp 在前面的教程中我們已經(jīng)說(shuō)過(guò) 它是一個(gè)copy 而例程2中的: void get_score(test &pn){ cin>>pn.name>>pn.socre;} 卻沒有這一過(guò)程 不開辟任何新的內(nèi)存空間 也沒有任何臨時(shí)變量的生成第二: 例程1在mian()中 必須對(duì)返回的結(jié)構(gòu)體變量進(jìn)行一次結(jié)構(gòu)體變量與結(jié)構(gòu)體變量直接的相互賦值操作 for(int i=0;i 而例程2中由于是通過(guò)內(nèi)存地址直接操作 所以完全沒有這一過(guò)程 提高了效率 for(int i=0;i 函數(shù)也是可以返回結(jié)構(gòu)體應(yīng)用的 例子如下: #include struct test { char name[10];float socre;}; test a; test &get_score(test &pn){ cin>>pn.name>>pn.socre;return pn;} void print_score(test &pn){ cout< void main(){ test &sp=get_score(a);cin.get();cout< 調(diào)用get_score(a);結(jié)束并返回的時(shí)候 函數(shù)內(nèi)部沒有臨時(shí)變量的產(chǎn)生 返回直接吧全局結(jié)構(gòu)變量a的內(nèi)存地址賦予結(jié)構(gòu)引用sp 最后提一下指針的引用 定義指針的引用方法如下: void main(){ int a=0;int b=10;int *p1=&a;int *p2=&b;int *&pn=p1;cout < pn就是一個(gè)指向指針的引用 它也可以看做是指針別名 總之使用引用要特別注意它的特性 它的操作是和普通指針一樣的 在函數(shù)中對(duì)全局指針的引用操作要十分小心 避免破壞全局指針! 給自己重新定義高品質(zhì)生活 最近和友人在美貓會(huì)聚首,一個(gè)話題:高品質(zhì)生活,深深吸引我們?cè)斦勏氯ァN覍?duì)我們的談話受益匪淺,認(rèn)為我們有必要對(duì)品質(zhì)生活重新下一個(gè)定義。 是否是高品質(zhì)生活關(guān)鍵是你怎樣看待生活的標(biāo)準(zhǔn),不是不缺錢生活就一定會(huì)高品質(zhì),也不是有了戶外活動(dòng)和精神上的放松就一定會(huì)是高品質(zhì)生活.從另一層面來(lái)講,都市人群享受自由的生活空間,金錢也會(huì)是很客觀的一面。所謂品質(zhì)在這個(gè)年代已經(jīng)被定位于精致便是品質(zhì),生活源于我們自身。享受是大多數(shù)都市人群本能的放松壓力的另一個(gè)復(fù)數(shù)名詞。 高品質(zhì)生活主要是看你對(duì)身邊發(fā)生的事情認(rèn)識(shí),你對(duì)待身邊的人的方式和他們對(duì)你的回報(bào),你快樂嗎? 總之快樂的生活高于一切! 高品質(zhì)的生活還取決于自己身心的和諧度。你做的事是不是你喜歡的事或是你想要做的事。一件事情的發(fā)生你對(duì)其有怎樣的認(rèn)識(shí),它是讓你覺得人生更加完整了還是讓你覺得自己寶貴的時(shí)間被浪費(fèi)了。如果你所經(jīng)歷的事你覺得可以構(gòu)成你人生中比較有意義的一部分,那么不管事情的好壞,至少你從中學(xué)會(huì)了人生,完善了人生,那么你這個(gè)人的生活品質(zhì)是比較高的;反之,如果一個(gè)人覺得他的生活不能給他一種充實(shí),安定的感覺,他覺得他做的很多事情都沒有意義或是給他人生的發(fā)展沒有太大的幫助,容易煩躁,出爾反爾的話,那這個(gè)人的生活品質(zhì)就不高了。舉個(gè)很簡(jiǎn)單的例子,一個(gè)農(nóng)民,收入平平,但有一個(gè)幸福的家庭,過(guò)著安定的生活,他認(rèn)為他的勞動(dòng)可以給家人帶來(lái)幸福,那我們就可以說(shuō)他有一個(gè)高品質(zhì)的生活;一個(gè)大學(xué)生,衣食無(wú)憂,但是整天碌碌無(wú)為,不愛學(xué)習(xí),揮霍時(shí)間最后還要怪罪到國(guó)家的教育制度上,這種不思進(jìn)取的學(xué)生我們可以說(shuō)他的生活品質(zhì)非常低。 高品質(zhì)生活沒有絕對(duì)的界限,主要是看你對(duì)這個(gè)世界,這個(gè)社會(huì)的看法。內(nèi)心堅(jiān)強(qiáng)樂觀的人總是可以找到事件的本質(zhì),從事件中獲得收獲或是吸取教訓(xùn);內(nèi)心脆弱自卑的人只會(huì)對(duì)這個(gè)世界產(chǎn)生更多的絕望與抱怨。想要提高自己生活的品質(zhì),首先要鍛煉自己的心智,讓自己成為一個(gè)自信,樂觀,豁達(dá),善良,懂得感恩的人;其次,自己一定要有理想,肯吃苦努力,堅(jiān)持自我,助人為樂,這樣,你才會(huì)成為一個(gè)尊敬別人并受別人尊敬的人。別人對(duì)你的尊敬程度會(huì)直接影響你的社會(huì)地位與社會(huì)滿足感。只有一個(gè)對(duì)世界有信心的人,才會(huì)活得快樂,才會(huì)體驗(yàn)到所謂的高品質(zhì)生活。 和友人在美貓會(huì)的促膝相談,使我們深刻認(rèn)識(shí)到金錢不等于品質(zhì)生活。在點(diǎn)燃香煙,無(wú)意間再一次看到美貓會(huì)的宗旨“打造愛美、愛生活、愛事業(yè)的平臺(tái)”,此時(shí),我們都再一次受到震撼,因?yàn)槊镭埦W(wǎng)極具超前的眼光和人文關(guān)懷,使我們自認(rèn)擁有高品質(zhì)生活的社會(huì)“精英”對(duì)自己曾經(jīng)鄙陋的看法感到羞愧,能夠在此獲得真正生活的定義,有一種“朝聞道夕死足矣”的感概。第四篇:給自己定義一個(gè)高品質(zhì)生活