请问在C语言里如何将一个数组元素的个数设为输入的值?
6个回答
展开全部
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 个单元,小意思了。
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 个单元,小意思了。
展开全部
这其实就是动态开辟数组,需要使用到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<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语言的,所以没有改,不好意思
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我当初学C的时候有过和你一样的想法,但是数组的内存只能静态分配,所以你必须指明数组的大小。
比如:int a[10];
char ch[] = "I love china!"。
一个显式指定大小,一个是隐式指定。
比如:int a[10];
char ch[] = "I love china!"。
一个显式指定大小,一个是隐式指定。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int i[7];
for(int x ; x < 6 ;++x)
{
i[x] = x; // x是数组第几个,值就是第几个
printf("第 i[%d] 个数是:%d",i[x],x);
}
是这个意思吗?
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); //释放内存
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个数组不能是变量,只能是常量,没法设置的。
追问
没法设置的吗?QAQ
追答
嗯,不可以,它必须是常量的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询