指针&数组&函数指针

来源:互联网 发布:苹果手机壳淘宝店推荐 编辑:程序博客网 时间:2024/04/30 07:43

一维数组 数组名相当于当前类型的指针 type* const &数组名

int array[10];int other[2][5];//内存分布一样array+1;//首元素地址+1*type(4)other+1;//首 &数组名+5*1*type(4);+1相当于数组指针+1

一个数组有 :数组类型 元素类型 数组大小

数组指针

int(*parray)[10]=&array;//数组指针与array 数据类型相同tydef int(INT10)[10];//sizseof =40INT10 intarray;

二维参数 相当于传递数组指针

void foo(int (*array)[10]){}int other[2][10];foo(&array)//&array ->常量数组指针(int(*)[10])void foo(int (*array)[2][10]){}foo(other)//常量指针 other数组指针(int(*)[10]),int*10个元素的数组指针foo(&ohter)&other->常量数组指针(int(*)[2][10])

指针数组

char *keys[100]={"aaa","bbb","ccc"};//能够存放100个指针,与能存放多长字符串无关,存放100个char*的指针,指向char类型,//只读,常量区char keys[100][100];//能够存放100个字符串,长度100;代表字符数组,不是字符串,可读写,栈区

指针数组传参
char **key和char *key[]一样
传入指针的指针,

void SetArrayValue(char *key[],unsigned int index,char *value){    *(key + index) = value;//传入指针的指针}

函数指针
好处是可使用回调函数

int foo(int one,int two){return 0;}void *pfoo=&foo;//函数指针  函数类型pfoo(10,10);//调用       调用时和普通调用一样

函数类型:返回值 参数列表(类型,个数,顺序)
int(*pfoo)(int,int)=foo;//函数类型

void foo2(){}void(*pfoo2)()=&foo2;typedef int FOOTYPE(int,int);//可当参数使用FOOTYPE* pfoo=foo;void foo3(FOOTYPE *func){}foo3(pfoo);

回调error

typedef void (FUNCERROR)(int)void PrintError(int code){    printf("Error:%d\r\n",code);}void SetValue(char *array[],char *value,FUNCERROR*error)if(array==NULL)    error(100)

指针,使用场合
作为参数
动态分配内存

//指针的指针void foo1(int **array,unsigned int size){*array=malloc(size *sizeof(int));}int *array=NULL;foo1(&array,100);free(array);

数组类型:元素类型+元素个数
一维数组:
&数组名:数组指针,数组类型*,tpye(name)[size]
数组名:当前元素地址,类型是元素的指针type*

二维数组:
&数组名:数组指针,type(name)[一维][二维]
数组名:元素地址;类型:数组指针:type(name)[二维size]
指针数组:
数组名:首元素地址;类型:type(*)*
&数组名:数组指针:type(*)(name)[size]
使用场合:参数传递:降维传递

函数指针:
返回值(name)(参数列表)

0 0
原创粉丝点击