关于如何输入一个数来任意确定数组大小

以c语言程序设计第四版谭浩强著P143说明部分为理论依据
以下是程序,为什么显示错误?
#include<stdio.h>
fun(int x)
{
int a[x], i,j;
for(i=0;i<x;i++)
scanf("%d",&a[i]);
for(j=0;j<x;j++)
printf("%d\t",a[j]);
}
void main()
{
int k;
scanf("%d",&k);
fun(k);
}

Compiling...
a.c
c:\users\administrator\desktop\a.c(4) : error C2057: expected constant expression
c:\users\administrator\desktop\a.c(4) : error C2466: cannot allocate an array of constant size 0
c:\users\administrator\desktop\a.c(4) : error C2133: 'a' : unknown size
执行 cl.exe 时出错.

一般数组的定义是不能用变量来作为维数的,
如:int a[n]是不行的;
数组的维数要用常量表达式定义,此常量表达式之恩那个包含整型字面值常量和枚举常量或用常量表达式初始化的const对象,非const变量以及要运行阶段才知道其值得const变量都不能用于定义数组的维数。
要满足你所说的用户输入数组大小的要求,就要用动态数组。
用整型变量来举个例子如下:
C++中用下面定义:
int n;
std::cin >> n;
int *a = new int[n];
C语言中可以用malloc:
int n;
scanf("%d", &n);
int *a = (int*)malloc(n * sizeof(int));

要追加一点说明就是动态数组是存储在堆上的,用完了一定要释放内存,否则会造成内存泄露。
释放内存的时候,malloc申请的内存free来释放,new申请的内存用delete释放。
举个单纯用C语言基础知识说明的例子
void maim ()
{
int a[100],i,n;
scanf("%d",&n);
for(i=0;i<=n;i++)
scanf("%d",&a[i]);
printf("%d\n",a[i]);
}
注意n<=100
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-10
数组在编译前的长度应该是确定的
若不确定
只能用动态内存分配
把int a[x]改成
int *a;
a=(int*)malloc(x*sizeof(int));
谭浩强的书虽名扬天下,但那只是针对初学者的
书上各种错追问

我也感觉是这样,尤其是在数组和指针这一块,看的时候产生了很多问题,又不知道该怎么解决,但是我也是才接触了一学期,老师讲到指针就结课了,每个星期就一节讲解大课,一节上机课,都是大体讲了一下,但是我又想把书中的东西都搞清楚,有没有什么很适合我这种人看的书啊,推荐一下,谢谢了!

追答

《C语言深度剖析》 很有深度的,我估计初学者是看不懂的
另外,如果你想把所有细节都弄懂,你最好去学下汇编(如果你是计算机专业,我劝你最好学一下,软件工程的话,学不学无所谓了)

本回答被提问者采纳
相似回答