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