一维数组 数组名相当于当前类型的指针 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)(参数列表)
新闻热点
疑难解答