二维数组有静态二维数组和动态二维数组;
静态二维数组
int a[10][]; //(1)
int a[2][]={
{1,2}}; //(2)
(1)定义变量,[][]第一个是行,第二个是列;行一定要给出,列的话编译器会帮你算;
(2)部分初始化:其他未初始化元素为0;(上面两行代码只是为了比较,上机会爆的啊)
重头戏当然还是,动态规划二维数组啊
动态规划二维数组
当你害怕数组爆的时候,当你无力看着数组已经爆的时候,当你苦恼该定义多大的数组的时候,节省内存空间的你,来试一下动态规划二维数组吧:
int **myMalloc(int r, int c, int* returnSize, int** returnColumnSizes) {
int i;
int **ret = (int **)malloc( sizeof(int *) * r );
*returnColumnSizes = (int *)malloc( sizeof(int) * r );
*returnSize = r;
for(i = 0; i < r; ++i) {
ret[i] = (int *)malloc( sizeof(int) * c );
(*returnColumnSizes)[i] = c;
}
return ret;
}
指针数组-->元素是指针,指向内存
二级指针-->指向一行一维数组的首地址;
一级指针-->指向一个一维数组的首地址;
myMalloc的实现:
- ①申请r个二级指针,(他们中的每个分别负责指向一个一维数组,但是这个时候他们还没有一维数组指向);
- ②返回!这里的顺序不能与③调换
返回1:行的长度,即为r;
返回2:每行一维数组数,返回数组。所以我们在这里申请一个一维数组,所返回列的长度即为一个一维数组首地址;
- ③循环+返回
循环r次,每次申请c个一个内存空间,即为一个一维数组,(让每个二级指针指向
c个一维数组的首地址);
同时返回每个一维数组个数,我们再②中所申请的一个一维数组就用于此;
- 四返回二维数组首地址。
看懂了吗?看不懂刷刷题就懂了;懂了赶紧练个题巩固一下
/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
int**mymalloc(int r,int c,int*returnSize,int**returnColumnSizes){
int **ret=(int**)malloc(sizeof(int*)*r);
*returnSize=r;
*returnColumnSizes=(int*)malloc(sizeof(int*)*r);
for(int i=0;i<r;++i){
ret[i]=(int*)malloc(sizeof(int)*c);
(*returnColumnSizes)[i]=c;
}
return ret;
}
int** transpose(int** matrix, int matrixSize, int* matrixColSize, int* returnSize, int** returnColumnSizes){
int i,j;
int r=matrixColSize[0],c=matrixSize;
int**ret=mymalloc(r,c,returnSize,returnColumnSizes);
for(i=0;i<r;i++){
for(j=0;j<c;j++){
ret[i][j]=matrix[j][i];
}
}
return ret;
}
bool isToeplitzMatrix(int** matrix, int matrixSize, int* matrixColSize){
int i;
int x, y;
for (i = 0; i < *matrixColSize; i++) {
x = 1;
y = i + 1;
while (y < *matrixColSize && x < matrixSize) {
if (matrix[0][i] != matrix[x][y]) {
return false;
}
x++;
y++;
}
}
for (i = 1; i < matrixSize; i++) {
x = i + 1;
y = 1;
while (y < *matrixColSize && x < matrixSize) {
if (matrix[i][0] != matrix[x][y]) {
return false;
}
x++;
y++;
}
}
return true;
}
今天的内容已经结束了>_<
如果我的文章对你有帮助,不要吝惜你的点赞,小鲤希望得到你的支持ლ(´ڡ`ლ)
求三连和关注!!!