请问在C语言里如何将一个数组元素的个数设为输入的值?

如题所述

C/C++ 语言里, 声明 数组大小时,只允许用常数,例如:
int a[10];
int b[5*4*3];
不允许用 变量。

如何将一个数组元素的个数设为输入的值呢,一般用动态分配。
int *a; // 声明为指针。
知道大小n后, 用动态分配:
a = (int *) malloc(sizeof(int) * n);
接下来就可以 把 a 看成 你 声明过 int a[n]; 了。

对初学者来说,你开个大数组,多给些单元,就可以了。
例如,你估计 你的 n = 10 到 1000 范围,你声明 int a[2000]; 就怎么也够用了。
现代计算机用虚拟存储,1000,2000 个单元,小意思了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-25
这其实就是动态开辟数组,需要使用到malloc函数

#include<iostream>
using namespace std;
void main()
{
//比如要开辟int型的数组a[n]
int n,*a;
printf("请输入开辟数组的大小:");
scanf("%d",&n);
a=(int *)malloc(n*sizeof(int));
printf("自动维数组赋值并打印输出:\n");
for(int i=0;i<n;i++)
{
a[i]=i;
}
for(int j=0;j<n;j++)
{
printf("%d\n",a[j]);
}
free(a);
}

//看明白就懂了追问

我是新手。。。
能不能解释一下第三行,看不懂诶

谢谢

追答

#include //c语言头文件
#include //c语言头文件
void main()
{
//比如要开辟int型的数组a[n]
int n,*a;
printf("请输入开辟数组的大小:");
scanf("%d",&n);
a=(int *)malloc(n*sizeof(int)); //malloc函数为C语言动态开辟内存的函数
printf("自动维数组赋值并打印输出:\n");
for(int i=0;i<n;i++) //这个循环是自己随意为数组元素赋值
{
a[i]=i;
}
for(int j=0;j<n;j++)
{
printf("%d\n",a[j]);
}
free(a);
}

//刚才的#include(iostream)是c++的头文件
//using namespace std;是c++的命名空间
//不过C++是兼容C语言的,所以没有改,不好意思

本回答被提问者采纳
第2个回答  2013-07-18
我当初学C的时候有过和你一样的想法,但是数组的内存只能静态分配,所以你必须指明数组的大小。
比如:int a[10];
char ch[] = "I love china!"。
一个显式指定大小,一个是隐式指定。
第3个回答  2013-07-18
int i[7];
for(int x ; x < 6 ;++x)
{
i[x] = x; // x是数组第几个,值就是第几个
printf("第 i[%d] 个数是:%d",i[x],x);
}

是这个意思吗?追问

不,本来想
scanf("%d",n);
int a[n];
但是不行。。。。
所以想问问有没有别的方法

追答

你试试下面的
scanf("%d",n);

int *a =(int *)mcalloc(n,sizeof(int)); 你试试这个,动态申请内存
for( int x = 0; x < n -1 ;++x)
{
a[x] = x; // x是数组第几个,值就是第几个
printf("第 a[%d] 个数是:%d",a[x],x);
}

free(a); //释放内存

第4个回答  2013-07-18
这个数组不能是变量,只能是常量,没法设置的。追问

没法设置的吗?QAQ

追答

嗯,不可以,它必须是常量的!

相似回答