C中的三角形数组

时间:2015-01-29 17:30:46

标签: c arrays dynamic-arrays

任何人都知道如何在C中创建三角形数组?我尝试使用malloc,首先是第一个"维度"然后我用循环来创建malloc的第二维度,但我的老师说这不是正确的。

 int **price_of_diamond, i, j;
price_of_diamond=malloc((count*sizeof(int)));
for(i=0;i<conut;++i){
    price_of_diamond[i]=malloc((i-1)*sizeof(int));
}

任务的提示是&#34;创建三角形数组(获得更短的数组)&#34;。 程序在理论上有效,但老师说这是错误的实现,但没有说出什么是坏的

2 个答案:

答案 0 :(得分:1)

第一个分配应该使用(int *)not(int)。
 你不应该在你的循环中使用大小为&lt; = 0的malloc(当i = 0且i = 1时)。使用(i + 1),您的数组将从1到计数大小不等。

price_of_diamond = malloc(count * sizeof(int*));
for(i=0;i<count;++i) price_of_diamond[i]=malloc((i+1)*sizeof(int));

答案 1 :(得分:-2)

创建数组并不是将它们相互联系起来。你不能通过再次动画来“添加一个维度”,只需将新数组重新分配到曾经是第一个数组的数组中。解决方案是将其初始化为3d数组,如下所示:

const int sizeDimOne=4; // size of the first dimention
const int sizeDimTwo=4; // size of the second dimention
const int sizeDimThree=4; // size of the third dimention
int **threedim = malloc(sizeDimOne*sizeDimTwo*sizeDimThree*sizeof(int)); // declaring an array is simple : you just put in the values for each dimention.

永远不要忘记在代码的最后释放它,数据泄漏是不好的! :)

free(array); // Super important!

会创建数组。 如果您想手动分配值,请让我从一个很棒的网站上绘制一个示例:http://www.tutorialspoint.com/cprogramming/c_multi_dimensional_arrays.htm

/*Manually assigning a double-dimentional array for example.
* a very simple solution - just assign the values you need,
* if you know what they are. */
int a[3][4] = {  
{0, 1, 2, 3} ,   /*  initializers for row indexed by 0 */
{4, 5, 6, 7} ,   /*  initializers for row indexed by 1 */
{8, 9, 10, 11}   /*  initializers for row indexed by 2 */
};
编辑:看到你的代码,我看到你们使用指针进行声明。这是一个很好的例子,我之前提到的一个来源,略有修改,关于确切用途:

const int nrows = 3; // number of rows.
int **array;
array = malloc(nrows * sizeof(int *)); /* That's because it's an array of pointers in here,
* since you're using the pointer as an array, the amount of datarequired changes.
* dont forget to free! 
*/