二维数组名和二维数组地址做函数参数

int gerArry1(char **p1){
char ** p;
p = p1;
return 0;
};

int gerArry2(char (*p2)[3]){
char (*p)[3];
p = p2;
return 0;
};
int gerArry3(char ** p3){
char ** p;
p = p3;
return 0;
};
int gerArry4(char * (*p1)[3]){//数组名退化为指针,无法传出被调函数分配的内存块
char * (*p)[3];
p = p1;
return 0;
};
int gerArry5(char (*p2)[][3]){//数组名退化为指针,无法传出被调函数分配的内存块
char (*p)[][3];
p = p2;
return 0;
};
int gerArry6(char ** p3){
char ** p;
p =p3;
char ** myarry = (char **)malloc(2
sizeof(char
));
for(int i=0;i<2;i++) {
myarry[i] = (char )malloc(3sizeof(char));
}
*p3 = myarry;//只有这种二维指针可以传出
return 0;
};

int main(){
char * p1[3] = {“aaa”,“bbb”};
char p2[2][3] = {“aaa”,“bbb”};
char ** p3;

gerArry1(p1);
gerArry2(p2);
gerArry3(p3);
gerArry4(&p1); //数组名退化为指针,无法传出被调函数分配的内存块
gerArry5(&p2); //数组名退化为指针,无法传出被调函数分配的内存块
gerArry6(&p3); //可以传出

return 0;
}

猜你喜欢

转载自blog.csdn.net/katerdaisy/article/details/132495687