首页 > 编程知识 正文

malloc函数为结构体分配内存,c语言申请内存空间

时间:2023-05-04 20:56:28 阅读:41396 作者:685

关于直接创建数组与通过malloc二次指针创建数组之间的区别

如果直接创建,则引用函数时的格式为矩阵[ ] [ col ]。

如果用指针申请,函数可以直接引用。 (int * *矩阵) )。

为什么,我不太清楚

首先,直接创建的数组matrix[][]需要col是因为查找矩阵[ I ] [ j ]是通过查找*(matrixI*3j )来确定数据的位置,作为

我晕了

首先研究了1个1维指针数组和多个1维数组一起构成2维数组,直接制作出来。 矩阵[ ] [ ]在主函数中引用矩阵[ I ] [ j ],可以毫无错误地直接引用矩阵[ I ]。 1 )函数调用格式为f ) f (正确调用f(int matrix[][col] ),其中打印了第I行的第一个地址,*(* )矩阵(j )也打印了预期结果;2 )错误由于矩阵1不是矩阵中预期的sizeof(int ) col字节,表示矩阵(matrix )的结果是矩阵只是原始数组地址的副本,而原始数组中的列数等信息已经丢失。 此时,在矩阵中无法容易地得到二维数组的信息,但在malloc中创建数组int * * mptr ptr=(int * * ) malloc ) )的if (! 返回- 1; //申请失败for(I=0; i 3; I () (mptrptrI )=(int* ) malloc ) sizeof(int ) )3); if (! (* ) *(mPtrPtr i ) ) ) exit(-1 ); //申请失败}获得数组mPtrPtr,缩写为m直接创建调用没有问题。 用m[][]调用或* () ) ) mI ) j )警告) ) *(m i*col j )会成为大问题,不能这样调用。 由于指针I在基地址上附加I*sizeooolj,所以用malloc创建的数组被证明在f(intm () [col] )中调用打印时会发生错误,直接f(int**m ) 我不确信函数中可以直接从m[][]获取数组信息。 1 .直接创建的数组只能从f(int m[][col]中删除函数2.malloc中创建的数组只能从f(int** m中删除函数并调用#includestdio.h#include int num=1; int**mptrptr=(int** ) malloc ) sizeof(int* )3); if (! 返回- 1; //申请失败for(I=0; i 3; I () (mptrptrI )=(int* ) malloc ) sizeof(int ) )3); if (! (* ) *(mPtrPtr i ) ) ) exit(-1 ); //申请失败(/*赋值(/for ) ) I=0; i 3; I ) for(j=0; j 3; j({mptrptr[I][j]=(num ); }/*打印*/for(I=0; i 3; I ) for(j=0; j 3; j () printf('%d ',mPtrPtr[i][j]; }printf((n ); (p ) mptrptr ); printf (释放已申请的内存(n ); for(I=0; i 3; I ) free(* ) mptrptrI ); *(mptrptrI )=空; (free ) mptrptr; mPtrPtr=NULL; /**上的代码表示可以直接引用并打印由辅助指针创建的矩阵。 以下代码比较直接生成的矩阵*/int m[3][3]; num=1; /*赋值*/for(I=0; i 3; I ) for(j=0; j 3; j () m(I ) ) j )=) num; }} printf (创建矩阵并直接打印(n ); for(I=0; i 3; I ) for(j=0; j 3; j () printf('%d ',m[i][j]; }printf((n ); (p ) m; 返回0; }voidp(int**m ) {printf )函数p的打印结果(n ); int i,j; for(I=0; i 3; I ) for(j=0; j 3; j () printf('%d ',m[i][j]; }printf((n ); }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。