4.指針數(shù)組
因?yàn)橹羔樖亲兞?因此可設(shè)想用指向同一數(shù)據(jù)類型的指針來(lái)構(gòu)成一個(gè)數(shù)組,這就是指針數(shù)組。數(shù)組中的每個(gè)元素都是指針變量,根據(jù)數(shù)組的定義,指針數(shù)組中每個(gè)元素都為指向同一數(shù)據(jù)類型的指針。指針數(shù)組的定義格式為:
類型標(biāo)識(shí) *數(shù)組名[整型常量表達(dá)式];
例如:
int *a[10];
定義了一個(gè)指針數(shù)組,數(shù)組中的每個(gè)元素都是指向整型量的指針,該數(shù)組由10個(gè)元素組成,即a[0],a[1],a[2], ...,a[9],它們均為指針變量。a為該指針數(shù)組名,和數(shù)組一樣,a是常量,不能對(duì)它進(jìn)行增量運(yùn)算。a為指針數(shù)組元素a[0]的地址,a+i為a[i]的地址,*a就是a[0],*(a+i)就是a[i]。
為什么要定義和使用指針數(shù)組呢?主要是由于指針數(shù)組對(duì)處理字符串提供了更大的方便和靈活,使用二維數(shù)組對(duì)處理長(zhǎng)度不等的正文效率低,而指針數(shù)組由于其中每個(gè)元素都為指針變量,因此通過(guò)地址運(yùn)算來(lái)操作正文行是十分方便的。
指針數(shù)組和一般數(shù)組一樣,允許指針數(shù)組在定義時(shí)初始化,但由于指針數(shù)組的每個(gè)元素是指針變量,它只能存放地址,所以對(duì)指向字符串的指針數(shù)組在說(shuō)明賦初值時(shí),是把存放字符串的首地址賦給指針數(shù)組的對(duì)應(yīng)元素,例如下面是一個(gè)書(shū)寫(xiě)函數(shù)month_name(n),此函數(shù)返回一個(gè)指向包含第n月名字的字符指針(關(guān)于函數(shù),第6節(jié)將專門(mén)介紹)。
例2: 打印1月至12月的月名:
char *month_name(int n)
{
static char *name[]={
"Illegal month",
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
return((n<1||n>12)?name[0]:name[n]);
}
main()
{
int i;
for(i=0; i<13; i++)
printf("%s\n", month_name(i));
2、結(jié)構(gòu)(struct)
結(jié)構(gòu)是由基本數(shù)據(jù)類型構(gòu)成的、并用一個(gè)標(biāo)識(shí)符來(lái)命名的各種變量的組合。結(jié)構(gòu)中可以使用不同的數(shù)據(jù)類型。
1.結(jié)構(gòu)說(shuō)明和結(jié)構(gòu)變量定義
在Turbo C中,結(jié)構(gòu)也是一種數(shù)據(jù)類型,可以使用結(jié)構(gòu)變量,因此,象其它類型的變量一樣,在使用結(jié)構(gòu)變量時(shí)要先對(duì)其定義。
定義結(jié)構(gòu)變量的一般格式為:
struct 結(jié)構(gòu)名
{
類型 變量名;
類型 變量名;
...
} 結(jié)構(gòu)變量;
結(jié)構(gòu)名是結(jié)構(gòu)的標(biāo)識(shí)符不是變量名。
類型為第二節(jié)中所講述的五種數(shù)據(jù)類型(整型、浮點(diǎn)型、字符型、指針型和無(wú)值型)。
構(gòu)成結(jié)構(gòu)的每一個(gè)類型變量稱為結(jié)構(gòu)成員,它象數(shù)組的元素一樣,但數(shù)組中元素是以下標(biāo)來(lái)訪問(wèn)的,而結(jié)構(gòu)是按變量名字來(lái)訪問(wèn)成員的。
下面舉一個(gè)例子來(lái)說(shuō)明怎樣定義結(jié)構(gòu)變量。
struct string
{
char name[8];
int age;
char sex[2];
char depart[20];
float wage1, wage2, wage3, wage4, wage5;
} person;
這個(gè)例子定義了一個(gè)結(jié)構(gòu)名為string的結(jié)構(gòu)變量person,如果省略變量名person,則變成對(duì)結(jié)構(gòu)的說(shuō)明。用已說(shuō)明的結(jié)構(gòu)名也可定義結(jié)構(gòu)變量。這樣定義時(shí)上例變成:
struct string
{
char name[8];
int age;
char sex[2];
char depart[20];
float wage1, wage2, wage3, wage4, wage5;
};
struct string person;
如果需要定義多個(gè)具有相同形式的結(jié)構(gòu)變量時(shí)用這種方法比較方便,它先作結(jié)構(gòu)說(shuō)明,再用結(jié)構(gòu)名來(lái)定義變量。
例如:
struct string Tianyr, Liuqi, ...;
如果省略結(jié)構(gòu)名,則稱之為無(wú)名結(jié)構(gòu),這種情況常常出現(xiàn)在函數(shù)內(nèi)部,用這種結(jié)構(gòu)時(shí)前面的例子變成:
struct
{
char name[8];
int age;
char sex[2];
char depart[20];
float wage1, wage2, wage3, wage4, wage5;
} Tianyr, Liuqi;
相關(guān)推薦:計(jì)算機(jī)等考二級(jí)C語(yǔ)言備考:C語(yǔ)言/C++編譯過(guò)程北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |