第32课 数组指针和指针数组分析

数组类型
·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
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]→float

        float*
        float*

指针数组的应用例子32-2:

在函数里面所有的数组退化为指针
strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1str2,则返回正数
`

include "stdio.h"

include "string.h"

define DIM(a) (sizeof(a)/sizeof(*a))

int lookup_keyword(const char key,const char table[],const int size)
{

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()
{

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,
-1

小结:
·数组的类型由元素类型和数组大小共同决定
·数组指针是一个指针,指向对应类型的数组
·指针数组是一个数组,其中每个元素都为指针
·数组指针遵循指针运算法则
·指针数组拥有C语言数组的各种特性

你可能感兴趣的:(c)