首页
社区
课程
招聘
未解决 [求助]c/c++ 怎么动态生成二维数组.
发表于: 2019-5-19 06:16 3164

未解决 [求助]c/c++ 怎么动态生成二维数组.

2019-5-19 06:16
3164
c/c++ 怎么动态生成二维数组. 
就是类似下列代码这样的二维数组,内存是连续性的.
char TmpAlloc[520][450] = { 0 };
srand(GetTickCount64());
for (int i = 0; i < BitMapInfoHeader.biHeight; i++)
{
    for (int n = 0; n < BitMapInfoHeader.biWidth; n++)
    {
	RGBQUAD rgb;
	fread(&rgb, 1, sizeof(rgb), pFile);
	TmpAlloc[i][n] = rand() % ((126 - 32) + 1) + 32;
	a[i][n] = rand() % ((126 - 32) + 1) + 32;
	}
}
我度娘找了下,得到的是一维指针数组,他们说是二维数组.
可是我个人觉得这只是一维指针数组啊.因为其中一维储存指针并不是存储数据.
我想和编译器默认的那种二维数组一样操作,且数据存储是连续性的二维数组. 
char **a;
int i;
a = (char **)malloc(sizeof(char *) * m);     //分配指针数组
for(i=0; i<m; i++)
{
    a[i] = (char *)malloc(sizeof(char) * n); //分配每个指针所指向的数组
}


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
2
二维数组可以说是在连续内存上做array[x * row + y]
2019-5-19 08:01
1
雪    币: 1570
活跃值: (383)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
感谢解答.  我需要怎么申请内存. 就是一个或二个指针,可以做到像char array[3][60]这样的数组呢. 而不是度娘的那种一维指针数组.
2019-5-19 08:10
0
雪    币: 9626
活跃值: (1838)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
4

最后于 2019-5-19 14:30 被Sprite雪碧编辑 ,原因:
2019-5-19 09:12
1
雪    币: 1570
活跃值: (383)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
Sprite雪碧 char&nbsp;**array&nbsp;=&nbsp;(char**)malloc(3&nbsp;*&nbsp;60); array[1][27]& ...
感谢解答.   你这样会报内存读写错误的.因为array[1]并没有指针.  vs2017报C00005读写错误.
2019-5-19 09:27
1
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
6
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef char (*array2)[10][10];

int main(int argc, char const *argv[])
{
       char *buffer = (char*)malloc(100);
       memset(buffer, 0, 100);

       (*((array2)buffer))[5][7] = 'a';

       printf("%c\n", buffer[ 5 * 10 + 7]);
       return 0;
}
2019-5-19 12:29
1
雪    币: 1570
活跃值: (383)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
malokch #include #include #include typedef char (*array2)[10][10]; int main(int argc, char const ...
谢谢
2019-5-19 13:16
0
雪    币: 9626
活跃值: (1838)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
8
ezrealik 感谢解答. 你这样会报内存读写错误的.因为array[1]并没有指针. vs2017报C00005读写错误.
我自己傻了,哈哈,发出来之前没调试测试
2019-5-19 14:31
1
雪    币: 1570
活跃值: (383)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
Sprite雪碧 我自己傻了,哈哈,发出来之前没调试测试
有心就行. 感谢你帮忙解答
最后于 2019-5-19 14:48 被ezrealik编辑 ,原因:
2019-5-19 14:48
0
雪    币: 4034
活跃值: (3883)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
int** a = new int* [数量];

然后for (i = 0; i < 数量; i++)
               a[i] = new int[ 数量 ];

会了吗?
最后于 2019-6-28 06:46 被iamasbcx编辑 ,原因:
2019-6-28 06:45
1
游客
登录 | 注册 方可回帖
返回
//