數組類型
·C語言中的數組有本身的特定的類型
·數組的類型有元素類型和數組大小共同決定
例子:int array[5]的類型爲int[5]
定義數組類型
·C語言中經過typedef爲數組類型重命名
typedef type(name)[size];
-數組類型
typedef int(AINT5)[5];
typedef float(AFLOAT10)[10];
-數組定義:
AINT5 iArray;
AFLOAT10 fArray;
數組指針
·數組指針用於指向一個數組
·數組名是數組首元素的起始地址,但並非數組的起始地址
·經過將取地址&做用於數組名能夠獲得數組的起始地址
·可經過數組類型定義數組指針ArrayType*pointer;
·能夠直接定義:type(*pointer)[n];
pointer爲數組指針變量名
type爲指向的數組的類型
n爲指向的數組的大小
例子32-1:算法
`#include<stdio.h>
typedef int(AINT5)[5];
//AINT5表明數組類型,有五個元素,每一個元素類型是int
typedef float(AFLOAT10)[10];
//AFLOAT10表明數組類型,有10個元素,每一個元素類型爲float
typedef char(ACHAR9)[9];
//ACHAR9表明數組類型,有9個元素,每一個元素類型爲char
int main()
{數組
AINT5 a1; //a1爲數組,a1所表明的數組爲5個元素,每一個元素類型爲int float fArray[10]; AFLOAT10* pf = &fArray; //pf爲一個數組指針, ACHAR9 cArray; char(*pc)[9] = &cArray; //char(*pcw)[4] = cArray; int i = 0; printf("%d, %d\n",sizeof(AINT5), sizeof(a1)); for(i = 0;i < 10; i++) { (*pf)[i] = i; //fArray[i] = i; } for(i = 0; i < 10; i++) { printf("%f\n",fArray[i]); } printf("%p,%p,%p\n",&cArray,pc+1); //pc+1 == (unsigned int)pc + sizeof(cArray) == (unsigned int)pc + 9 return 0;
}`
輸出結果:
20, 20
0.000000
1.000000
2.000000
3.000000
4.000000
5.000000
6.000000
7.000000
8.000000
9.000000
00EFFDD8,00EFFDE1
指針數組
·指針數組是一個普通的數組
·指針數組中每一個元素爲一個指針
·指針數組的定義:type*pArray[n];函數
type* 爲數組每一個元素的類型
pArray爲數組名
n爲數組大小指針
float a[3]→floatcode
float* float*
指針數組的應用例子32-2:字符串
在函數裏面全部的數組退化爲指針
strcmp函數是string compare(字符串比較)的縮寫,用於比較兩個字符串並根據比較結果返回整數。基本形式爲strcmp(str1,str2),若str1=str2,則返回零;若str1<str2,則返回負數;若str1>str2,則返回正數
`string
int lookup_keyword(const char key,const char table[],const int size)
{it
int ret = -1; int i = 0; for(i = 0;i < size; i++) { if(strcmp(key,table[i]) == 0) { ret = i; break; } } return ret;
}
int mian()
{io
const char* keyword[] = { "do","for","if","register","return","switch","while","case","static" }; printf("%d\n",lookup_keyword("return",keyword,DIM(keyword))); printf("%d\n",lookup_keyword("main",keyword,DIM(keyword))); return 0;
}
`
輸出結果:
4,
-1table
小結:·數組的類型由元素類型和數組大小共同決定·數組指針是一個指針,指向對應類型的數組·指針數組是一個數組,其中每一個元素都爲指針·數組指針遵循指針運算法則·指針數組擁有C語言數組的各類特性