結(jié)構(gòu)指針變量的說(shuō)明和使用一個(gè)指針變量當(dāng)用來(lái)指向一個(gè)結(jié)構(gòu)變量時(shí), 稱(chēng)之為結(jié)構(gòu)指針變量。
struct 結(jié)構(gòu)名*結(jié)構(gòu)指針變量名
例如,在前面的例7.1中定義了stu這個(gè)結(jié)構(gòu), 如要說(shuō)明一個(gè)指向stu的指針變量pstu,可寫(xiě)為:
struct stu *pstu;
其訪(fǎng)問(wèn)的一般形式為: (*結(jié)構(gòu)指針變量).成員名 或?yàn)椋?
結(jié)構(gòu)指針變量->成員名
例如: (*pstu).num或者: pstu->num
在程序中,定義了stu結(jié)構(gòu)類(lèi)型的外部數(shù)組boy 并作了初始化賦值。在main函數(shù)內(nèi)定義ps為指向stu類(lèi)型的指針。在循環(huán)語(yǔ)句for的表達(dá)式1中,ps被賦予boy的首地址,然后循環(huán)5次,輸出boy數(shù)組中各成員值。 應(yīng)該注意的是, 一個(gè)結(jié)構(gòu)指針變量雖然可以用來(lái)訪(fǎng)問(wèn)結(jié)構(gòu)變量或結(jié)構(gòu)數(shù)組元素的成員,但是,不能使它指向一個(gè)成員。 也就是說(shuō)不允許取一個(gè)成員的地址來(lái)賦予它。因此,下面的賦值是錯(cuò)誤的。 ps=&boy[1].sex;而只能是:ps=boy;(賦予數(shù)組首地址)
或者是:
ps=&boy[0];(賦予0號(hào)元素首地址)
結(jié)構(gòu)指針變量作函數(shù)參數(shù)
在ANSI C標(biāo)準(zhǔn)
topoic=動(dòng)態(tài)存儲(chǔ)分配
1.分配內(nèi)存空間函數(shù)malloc
2.分配內(nèi)存空間函數(shù) calloc
calloc 也用于分配內(nèi)存空間。調(diào)用形式: (類(lèi)型說(shuō)明符*)calloc(n,size) 功能:在內(nèi)存動(dòng)態(tài)存儲(chǔ)區(qū)中分配n塊長(zhǎng)度為“size”字節(jié)的連續(xù)區(qū)域。函數(shù)的返回值為該區(qū)域的首地址。(類(lèi)型說(shuō)明符*)用于強(qiáng)制類(lèi)型轉(zhuǎn)換。calloc函數(shù)與malloc 函數(shù)的區(qū)別僅在于一次可以分配n塊區(qū)域。例如: ps=(struet stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(struct stu)是求stu的結(jié)構(gòu)長(zhǎng)度。因此該語(yǔ)句的意思是:按stu的長(zhǎng)度分配2塊連續(xù)區(qū)域,強(qiáng)制轉(zhuǎn)換為stu類(lèi)型,并把其首地址賦予指針變量ps。
3.釋放內(nèi)存空間函數(shù)free
調(diào)用形式: free(void*ptr); 功能:釋放ptr所指向的一塊內(nèi)存空間,ptr 是一個(gè)任意類(lèi)型的指針變量,它指向被釋放區(qū)域的首地址。被釋放區(qū)應(yīng)是由malloc或calloc函數(shù)所分配的區(qū)域。
希望與更多計(jì)算機(jī)等級(jí)考試的網(wǎng)友交流,請(qǐng)進(jìn)入計(jì)算機(jī)等級(jí)考試論壇
更多信息請(qǐng)?jiān)L問(wèn):考試吧計(jì)算機(jī)等級(jí)考試欄目
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |