//二级指针voidclass_25_1_1(int hang,int lie){//非连续int** a =(int**)malloc(hang*sizeof(int*));for(int i =0; i < lie; i++){
a[i]=(int*)malloc(lie *sizeof(int));}//赋值for(int i =0; i < hang; i++){for(int j =0; j < lie; j++){
a[i][j]= i * j;}}//打印for(int i =0; i < hang; i++){for(int j =0; j < lie; j++){printf("%d ", a[i][j]);}}//释放for(int i =0; i < hang; i++)free(a[i]);}//二级指针voidclass_25_1_2(int hang,int lie){//分配连续内存int** arr =(int**)malloc(hang *sizeof(int*));//arr[0]第一行的数组指针//arr[0]是指向整个二维数组
arr[0]=(int*)malloc(hang*lie *sizeof(int));//arr[1到lie-1] 也指向改arr[0]所指向二为数组 所以a[0]可以访问所有的二维数组元素for(int i =1; i < lie; i++){
arr[i]= arr[0]+ i * lie;}//打印二位数组地址for(int i =0; i < hang; i++){for(int j =0; j < lie; j++){printf("text[%d][%d]的地址为 %p\n\n", i, j,&arr[i][j]);}}//释放//先释放arr[0]free(arr[0]);//在释放arrfree(arr);}//数组指针 开辟二维数组voidclass_25_1_3(int hang,int lie){int*(*p)[];
p =(int*(*)[])malloc(hang *sizeof(int*));for(int i =0; i < lie; i++){(*p)[i]=(int*)malloc(sizeof(int)* lie);}//赋值for(int i =0; i < hang; i++){for(int j =0; j < lie; j++){(* p)[i][j]= i * j;}}//打印for(int i =0; i < hang; i++){for(int j =0; j < lie; j++){printf("%d ",(*p)[i][j]);}printf("\n");}//释放for(int i =0; i < hang; i++){free((*p)[i]);}}//数组指针 创建一维数组voidclass_25_1_4(int len){int(*p)[];
p =(int(*)[])malloc(len *sizeof(int));//赋值for(int i =0; i < len; i++){(*p)[i]= i;}//打印for(int i =0; i < len; i++){printf("%d ",(*p)[i]);}//释放free(*p);}