C语言如何给用函数二维数组动态赋值

#include <stdio.h>
int main(void)
{
int cal(int **a, int i);
void scan(int **a, int i);
int choose,sum;
int a1[1][1], a2[2][2], a3[3][3], a4[4][4], a5[5][5],a6[6][6] ;
printf("请输入矩阵的行数 大于等于1 小于等于6\n");
scanf("%d", &choose);
switch (choose)
{
case 1:scan(a1, 1); sum = cal(a1, 1); break;
case 2:scan(a2, 2); sum = cal(a2, 2); break;
case 3:scan(a3, 3); sum = cal(a3, 3); break;
case 4:scan(a4, 4); sum = cal(a4, 4); break;
case 5:scan(a5, 5); sum = cal(a5, 5); break;
case 6:scan(a6, 6); sum = cal(a6, 6); break;
default:printf("输入有误\n");
}
printf("结果为:%d\n", sum);
return 0;
}
int cal(int **a,int i)
{
int sum=0,m,n;
for (m = 0; m < i - 1; m++)
{
for (n = 0; n < i - 1; n++)
{
if (m + n == i)
{
break;
}
else
{
sum += a[m][n];
}
}
}
return sum;
}
void scan(int **a,int i)
{
int m,n;
for (m = 0; m < i; m++)
{
for (n = 0; n < i; n++)
{
scanf("%d",&a[m][n]);
}
}
}
改成scanf("%d",*(a+m)+n);也不好使
调试时候提示:0x0F7CC28C (msvcr120d.dll) (ConsoleApplication2.exe 中)处有未经处理的异常: 0xC0000005: 写入位置 0xCCCCCCCC 时发生访问冲突。
想问下怎么用函数给二维数组赋值

二维数组名不能直接传给二级指针,应该按以下方式使用:
int nChoose;
scanf("%d", &nChoose); // 让用户输入二维数组的大小

int **a = (int **)malloc(nChoose * sizeof(int *));
for (int i = 0; i < nChoose; i ++)
{
a[i] = (int *)malloc(nChoose * sizeof(int));
}

Scan(a, nChoose);
Calc(a, nChoose);

// 最后要释放数组,也要循环
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-01-12
1、当成普通数组使用,用for循环即可赋值。
2、例程:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *a=NULL;
int i;
a=malloc(sizeof(int)*10);/*动态创建一个有10个int元素的数组*/
if (a==NULL) { /*a==NULL表示空间分配失败*/
fprintf(stderr,"MEMORY ERROR");
return -1;
}
for (i = 0; i < 10; i++) {
a[i]=i; /*对数组进行赋值操作*/
}
free(a);/*动态分配的空间需要用free()函数释放*/
return 0;
}
第2个回答  推荐于2018-03-14

二维数组名不能直接传给二级指针,应该按以下方式使用:

int nChoose;
scanf("%d", &nChoose);    // 让用户输入二维数组的大小

int **a = (int **)malloc(nChoose * sizeof(int *));
for (int i = 0; i < nChoose; i ++)
{
    a[i] = (int *)malloc(nChoose * sizeof(int));
}

Scan(a, nChoose);
Calc(a, nChoose);

// 最后要释放数组,也要循环

本回答被提问者和网友采纳
相似回答