关于动态创建三维数组并赋初值0的问题?

clxye 2006-10-30 11:54:18
假设我有两个变量:iWordTemplateCount, iFolderCount这两个变量(这两个值都可以通过前面计算出来)
我想动态创建一个这样的三维数组WordFreqTable[iWordTemplateCount][3][iFolderCount]这个三维数组,并且赋初值0。请问该如何实现?

谢谢!!
...全文
580 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞哥 2006-10-30
  • 打赏
  • 举报
回复
貌似一个什么数组的转换
beginnow 2006-10-30
  • 打赏
  • 举报
回复
WordFreqTable[iWordTemplateCount][3][iFolderCount];

int ***ppp;
if((ppp = new int**[iWordTemplateCount]) == NULL)
return false;

for(int i = 0; i < iWordTemplateCount; i ++)
{
if((ppp[i] = new int *[3]) == NULL)
return FALSE;

for(int n = 0; n < 3; n ++)
{
if((ppp[i][n] = new int[iFolderCount]) == NULL)
return FALSE;
memset(ppp[i][n], 0, iFolderCount * sizeof(int));
}
}
morphymorphy 2006-10-30
  • 打赏
  • 举报
回复
malloc 版的。。。作天晚上才做过。。

// dynamic memory allocation
// Malloc3D: Memory allocation procedure for 3D arrays
int*** Malloc3D(int firstDemension,int secondDemension,int thirdDemension)
{
int*** p;
int i,j;
assert(firstDemension > 0 && secondDemension > 0 && thirdDemension >0);
if((p=(int***)malloc(firstDemension*sizeof(int**)))==NULL)
{
fprintf(stderr,"can't allocate memory\n");
}
for(i=0; i<firstDemension; ++i)
{
if((p[i]=(int**)malloc(secondDemension*sizeof(int*)))==NULL)
{
fprintf(stderr,"can't allocate memory\n");
}
for(j=0; j<secondDemension; ++j)
{
if((p[i][j]=(int*)malloc(thirdDemension*sizeof(int)))==NULL)
{
fprintf(stderr,"can't allocate memory\n");
}
}
}
for(i=0; i<firstDemension; i++)
{
for(j=0; j<secondDemension; j++)
{
for(k=0; k<thirdDemension; k++)
p[i][j][k] = 0;
}
}
return p;
}

lann64 2006-10-30
  • 打赏
  • 举报
回复
如果你的iWordTemplateCount, iFolderCount不是太大,耽心栈放不下的话,直接用就是了,不需要new或者malloc的。
OOPhaisky 2006-10-30
  • 打赏
  • 举报
回复
在c++/c中,动态创建的数组没有办法同时指定初始值,只能利用两个语句完成(第一个语句创建动态数组,第二个语句初始化);但是静态数组则可以在定义时指定初始值。
lann64 2006-10-30
  • 打赏
  • 举报
回复
c中:
int arr[ii][jj][kk]={0};
c++中:
int arr[ii][jj][kk];
memset(&arr[0][0][0],0,ii*jj*kk*sizeof(int));
clxye 2006-10-30
  • 打赏
  • 举报
回复
我先吃饭先,回来给你们分。
int N=2,M=3;
int ** arr = new int*[N];
for(int i=0;i<N;i++)
{
arr[i] = new int[M];
}
for(int j=0; j<N; j++)
{
for(int k=0; k<M; k++)
{
arr[j][k] = 0;
cout<<arr[j][k]<<endl;
}
}
从网上查的,也挺不错(三维还没试)。
飞哥 2006-10-30
  • 打赏
  • 举报
回复
float (*cp)[25][10];
cp = new float[10][25][10];
hailongchang 2006-10-30
  • 打赏
  • 举报
回复
int *p=(int*)malloc((3*iWordTemplateCount*iFolderCount)*sizeof(int));
char *q =(char*)p;
memset(q,0,4*3*iWordTemplateCount*iFolderCount);
clxye 2006-10-30
  • 打赏
  • 举报
回复
谢谢了!!

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧