C语言如何定义一个N行N列的二维数组任意输入数据

在不知道N是几的情况下如何定义数组,如果随便定义一个int a[10000][10000]是不是浪费了空间,,求高手解惑

我可以肯定的告诉你,不可能在程序运行的时候决定一个二维数组的大小,因为数组的大小是
在编译时就决定了的,不是在运行时,如果是一维的通过某些方法还可以办到,二维的就不可
能了,拿一维的来说:
polly@nowthen:~$ cat test.c
#include <stdio.h>
#include <stdlib.h>

struct test {
    int num;
    int arr[0];
};

int main()
{
    struct test *temp;
    int n = 0;
    scanf("%d", &n);
    if(n > 0) {
        temp = (struct test*)malloc(sizeof(struct test)+n*sizeof(int));
        temp->num = n;
        int i = 0;
        for(; i<temp->num; i++) {
            temp->arr[i] = i;
        }
        
        for(i=0; i<temp->num; i++) {
            printf("element %d = %d\n", i, temp->arr[i]);
        }
    }

    return 0;
}
polly@nowthen:~$ gcc -Wall test.c -o liu <---编译
polly@nowthen:~$ ./liu  <---运行
9  <---输入数组维数
element 0 = 0
element 1 = 1
element 2 = 2
element 3 = 3
element 4 = 4
element 5 = 5
element 6 = 6
element 7 = 7
element 8 = 8
polly@nowthen:~$ 
就上面的C语言标准也是不支持的,多维数组的办不到,一维的也尽量少用。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-25
对,数组下标是一个确定的值。但最好用define 定义数组下标,因为这样修改数组长度很方便
第2个回答  2013-07-25
用malloc函数
第3个回答  2013-07-25
1、一般情况下,题目会给出N不大于M,m不大于几的限制条件,此时只需这样定义即可 int a[N]M],其中N和M作为常数进行宏定义,比如#define N 5#define M 6 2、学到动态内存分配后,就不会有这样的担忧,需要时,可用malloc()函数在“堆”空间申请内存,该函数的原型是: void *malloc( size_t size );,功能是要求系统分配大小为size个字节的堆空间,注意到该函数的分会类型是void,通过强制类型转换即可获得需要的数据类型,比如int *p;p = (int *)malloc(30);如果申请成功,则返回该区域的首址,失败则返回NULL。本回答被网友采纳

C语言如何定义一个N行N列的二维数组任意输入数据
我可以肯定的告诉你,不可能在程序运行的时候决定一个二维数组的大小,因为数组的大小是在编译时就决定了的,不是在运行时,如果是一维的通过某些方法还可以办到,二维的就不可能了,拿一维的来说:polly@nowthen:~$ cat test.c#include <stdio.h>#include <stdlib.h>struct test { int num; ...

C语言怎么定义一个二维数组可以使每行的输入长度任意
1、使用动态数组可以实现变长度数组。建动态数组,其他就像数组一样使用就行了。2、例程:int row=0; \/\/函数int col=0; \/\/列数int i;int ** arr=NULL; \/\/下面假设存储的数据类型为intprintf(“请输入二维数组的行数和列数:”);scanf("%d%d",&row,&col);\/\/要不要加判断输入...

定义NXN的二维数组,输入数组元素的值,使数组左下半三角元素中的值全部...
int main(){ int a[N][N];int i, j, n;scanf("%d",&n);for(i=0; i<n; i++)for(j=0; j<n; j++)scanf("%d",&a[i][j]);for(i=0; i<n; i++)for(j=0; j<=i; j++)a[i][j] = 0;for(i=0; i<n; i++){ for(j=0; j<n; j++)printf("%d ",a[...

c语言定义了一个二维字符数组怎么赋值,要求输入n表示n行,然后每行输入...
首先用gets()取得字符串,然后用strcpy()函数进行赋值。我的编译器没有VLA的功能,所以我定义了4行,有这个功能的话把4改成n就可以 include<stdio.h> include<string.h> int main(void){ int i;char string[4][100];char str[100];for(i=0;i<4;i++){ gets(str);strcpy(string[i],st...

如何用c语言实现二维数组?
使用 C 语言实现二维数组可以通过以下步骤:1. 声明一个二维数组变量:首先,需要声明一个二维数组变量来存储数据。声明二维数组需要指定数组的行数和列数,并可以给数组命名。2. 初始化二维数组:可以选择在声明二维数组时初始化,或者在后续的代码中初始化数组。可以使用循环结构来遍历数组的每个元素,并...

C语言中如何定义一个二维数组,数组长度由输入值确定?
datatype **dta=na(3,2); \/*创建一个3行2列的datatype数组*\/ int i,j; if (!dta) { \/*如果创建失败,则输出错误信息并结束程序*\/ fprintf(stderr,"MEMORY ERROR\\n"); return -1; } else { for (i=0; i<3; i++) { \/*使用刚才创建的二维数组*\/ for (j=0; j<2; j++) { dta[i]...

c语言:怎样用malloc函数动态分配二维数组,使之可输入数组的行数和每行...
int row = 3;int (*mem)[4] = (int (*)[4])0; \/\/ 定义数组首指针 mem = (int (*)[4])malloc(sizeof(int(*)[4]) * row); \/\/ 分配row行, 4列的数组 \/\/ 分别为二维数组的第一维各个元素赋值。mem[0][0] = 1;mem[0][1] = 2;mem[0][2] = 3;mem[0][3] = 4...

C语言:主函数声明NxN二维数组并初始化,编写函数int fun(int [],int...
int fun(int x[],int n){ int i,j,s,t,(*p)[N]=(int (*)[N])x;for(t=n-1,s=i=0;i<n;i++)for(j=0;j<n;j++)s += i==j || i+j==t ? p[i][j] : 0;return s;} int main(int argc,char *argv[]){ int a[N][N],i,j,s;for(s=i=0;i<N;i++)...

C语言怎样输入一个行列可变矩阵 行列未定 任意矩阵 从键盘输入
这是不可能实现的,只能用我的方法模拟出一个二维数组。我的代码现在行和列就是键盘输入的了呀 scanf("%d%d",&m,&n);m和n就是行和列 至于键盘输入数组数据,把 *(p+m*i+j) = i*j;\/\/可以实现对数据赋值 改成 scanf("%d",(p+m*i+j))即可。相加你自己告别,两个循环就能搞定的问题...

C语言中的二维数组的赋值,输入输出怎么用
代码,实现先输入二维数组的行数m和列数n,并再输入m*n个整型数据存到动态二维数组中。最后输出所有二维数组的元素值。int main(){ int**p;\/\/定义二维指针。int m,n;\/\/行数和列数。int i,j;scanf("%d%d",&m,&n);\/\/输入行数和列数。if(m<=0||n<=0)return-1;\/\/行数或列数非法...

相似回答