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

#include<stdio.h>intmain(void){intcal(int**a,inti);voidscan(int**a,inti);intchoose,su... #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 时发生访问冲突。
想问下怎么用函数给二维数组赋值
展开
 我来答
12917736427c66b6
2015-10-22 · TA获得超过4.1万个赞
知道大有可为答主
回答量:7541
采纳率:84%
帮助的人:606万
展开全部
二维数组名不能直接传给二级指针,应该按以下方式使用:
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);

// 最后要释放数组,也要循环
乐跑小子
2016-01-12 · TA获得超过1.5万个赞
知道大有可为答主
回答量:1.1万
采纳率:7%
帮助的人:4497万
展开全部
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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
有你的晴天12138
推荐于2018-03-14 · TA获得超过1001个赞
知道小有建树答主
回答量:305
采纳率:80%
帮助的人:206万
展开全部

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

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)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式