在以下家庭作业中:
一个。将数组十个值打印到一行。确保值按行对齐。 湾返回偶数值的计数 C。返回数组中所有值的总和
3。重复上面的数字2,但这次代替10 X 10数组,提示用户输入行和列的大小,允许用户填写值并显示数组。(提示:使用指针和动态内存分配)
我坚持使用数字3.我不确定如何正确使用动态内存分配和指针为用户输入的行数和列数腾出空间。
int main(void)
{
int hundred[100];
cien(hundred);
even(hundred);
total(hundred);
two_dim(hundred, table);
hi_row(table);
cust_arr(hundred,table);
system("pause");
return 0;
}
void cien(int hundred[])
{
int i = 0;
int range = (999 - 1) + 1;
for (i = 0; i < 100; i++)
{
hundred[i] = rand() % range + 1;
if (hundred[i] % 3 == 0 || hundred[i] % 7 == 0)
{
hundred[i] = hundred[i] * -1;
printf("%d\t", hundred[i]);
}
else
{
printf("%d\t", hundred[i]);
}
}
return;
}
int two_dim(int hundred[], int arr[][10])
{
int x;
int y;
int i = 0;
int table[10][10];
while (i != 100)
{
for (x = 0; x <10; x++)
{
for (y = 0; y < 10; y++)
{
arr[x][y] = hundred[i];
printf("%d\t", arr[x][y]);
i++;
}
}
}
return **table;
}
void** cust_arr(int hundred[], int table[][10])
{
int x, y, i, j, k=0;
int **arr;
printf("input the number of rows.\n" );
scanf_s("%d", &x);
i = (int*)calloc(x, sizeof(int*));
printf("input the number of columns.\n");
scanf_s("%d", &y);
j = (int*)calloc(y, sizeof(int*));
while (k != 100)
{
for (i = 0; i <= x; i++)
{
for (j = 0; j <= y; j++)
{
hundred[k] = table[10][10];
table[10][10] = **arr[i][j];
}
}
printf("%d\n", **arr[i][j]);
k++;
}
}
由于提示符重复编号2,我试图在cust_arr()函数中创建类似的循环
答案 0 :(得分:0)
malloc将返回指定内存区域的指针。您可以在指针上使用括号来指定索引,就像静态数组一样。由于你需要一个二维数组,你需要一个指向指针数组的指针,即列指向行,行指向值。
int ** dynamicPointer = malloc(sizeof(int*)*columns);
for(int i = 0; i < columns; i++)
dynamicPointer[i] = malloc(sizeof(int)*rows);
//address of final column and row
dynamicPointer[columns- 1][rows - 1] = 3;
print("%d\n", dynamicPointer[columns- 1][rows - 1]);
答案 1 :(得分:-1)
对于10x10阵列,我建议使用variable length arrays。如果您想使用dynamic allocation,请使用malloc
功能。
int x, y;
int **table;
scanf("%d %d", &x, &y);
table = malloc(x*sizeof(int *));
for(int i = 0; i < x; i++)
table[i] = malloc(y*sizeof(int));
除此之外,显示的代码有许多缺陷,需要修复。最好将所有函数声明和定义放在函数之外,并指定它们的返回类型和参数。