gpt4 book ai didi

c - 变量(指向指向 int 的 int 指针的 int 指针,(NxN 的 int 数组),一旦存储了一些输入就会崩溃?

转载 作者:太空宇宙 更新时间:2023-11-04 02:05:26 24 4
gpt4 key购买 nike

此应用程序的目的是使用多指针制作一个 NxN 变量/用户定义的数组
整个“数组”(修辞格)被填满,
然后一个函数将所有数字相加,并在一个新的“数组”中找到存储在其中的每一行的总和,该数组将被返回(我的意思是指向它的指针)
不能可能返回一个ENTIRE ARRAY吧?
我知道 scanf() 是邪恶的(呵呵)如果那是问题所在,我会将其更改为 fgets()atoi()!
在几次有效输入后它崩溃了!!!
PS 33 E:\ask1.c [警告] 赋值从指针生成整数而不进行强制转换

#include <stdio.h>
#include <stdlib.h>
int* linesum(int **ar);

main()
{
int n,i,j,*temp,SIZE;
printf("Input Array Dimensions NxN ");
scanf(" %d",&SIZE);
int **Table=(int**)malloc(SIZE*sizeof(int*));
for(i=0;i<SIZE;i++)
*(Table+i)=(int*)malloc(SIZE*sizeof(int));

for(i=0;i<SIZE;i++)
for(j=0;j<SIZE;j++){
printf("Input int of %d row %d column ",i,j);
scanf(" %d",*(Table+i*SIZE+j));
}
temp=linesum(Table,SIZE);
for(i=0;i<SIZE;i++)
printf("Sum of line %d is %d",i,*(temp+i));
return 0;
}

int* linesum(int **ar,int N)
{
int i,j,lsum=0;
int *new=malloc(N*sizeof(int));
for(i=0;i<N;i++){
for(j=0;j<N;i++)
lsum+=*(ar+i*N+j);
*(new+i)=lsum;
}
return (new);
}

最佳答案

当您编写类似Table+i*SIZE+j 的内容时,您假设您的“二维数组”连续存储在内存中。 不是。您没有分配一个数组来保存 N*M 个元素。您创建了 N 个数组,每个数组包含 M 个元素。这 N 个数组中的每一个都有不同的(并且几乎肯定是不连续的)起始地址。

索引这个数组的数组的正确方法是 Table[i][j]

要在不使用 [] 的情况下对其进行索引(按照 OP 在下面评论中的要求),您可以编写 *(*(Table + i) + j)。我不推荐这样做,因为它的可读性远不如 Table[i][j]

关于c - 变量(指向指向 int 的 int 指针的 int 指针,(NxN 的 int 数组),一旦存储了一些输入就会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21149277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com