C语言 可变长数组
发布网友
发布时间:2022-04-20 08:23
我来回答
共3个回答
热心网友
时间:2023-07-25 15:09
我就不看你的bubble sort的算法部分了,直接跟你讲你不知道错误的原因。
你第一种写法:
int n=1, a[n], i=0, j=0, k=0;
这里你已经定义n = 1, 而a[n]也在该行定义。
那么编译器在此就直接给a这个数列分配内存了。
也就是说你a这个数组大小就确定了,即为1。
我不知道你学了内存分配没有,简单给你讲解一下,
具体你可以在网上搜。
比如一个含有5个整数类型的数组可以这样定义a[5],
但是也可以这样获得:int *a = (int *) malloc ( sizeof( int ) * 5 );
也就是说我们给一个指针分配了内存,从而得到一个数组,
而a[5]这样定义也是需要编译器在编译程序的时候分配内存的
而编译器会根据你的代码优化你的程序,并把代码转化为汇编再者machine code
说多了,继续给你分析
你修改过的代码
int n=1, i=0, j=0, k=0;
printf("请输入数组长度:");
scanf("%d", &n);
int a[n]; //修改
这个时候由于你在声明数组之前就已经读入n了,
所以a这个时候才是根据你输入的数字所得大小的数组。
这样你懂我的意思了吗?
热心网友
时间:2023-07-25 15:10
你放scanf函数前面,就表示申明了只有一个元素的数组,而放在它后面,就表示数组大小是随着你输入的数字 的不同而变化的,放前面之所以出错时数组溢出越界了
热心网友
时间:2023-07-25 15:10
你后面这个程序也是有问题的,只是“碰巧”可以运行而已。
这个“碰巧”的意思是你的程序只有一个main函数,且你在声明了int a[n]之后没有声明别的变量,这样当你用a[14]访问到越界的数组的时候也能按照你的预想运行,不信的话可以在int a[n]之后声明别的变量,并在“printf("按由大到小排列为:\n");” 这个语句之前去改变它的值,这样肯定就会改变到数组a里面元素的值。
实际编译器在编译下面的程序的时候,预先只是按n=1来给数组a分配了一个int空间而已。
你的程序应该要用malloc/free来动态申请数组a的内存空间,记得使用完后并释放它。追问那可变长数组应该怎样写呢?
c语言中是否支持变长数组?
1、C语言中不支持。C++中支持变长数组(你可以自行度娘变长数组和alloca函数),但是因为其实在栈上分配,不被推荐使用。做为解决方案,你可以使用C式的malloc函数或者C++式的new函数来在堆上动态分配内存,这样长度是完全可以自定的。2、C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供...
c语言如何实现无限长的数组?
1 由malloc和realloc两个函数,分配动态空间,随时按需改变数组的最大长度。通过下面例子来理解该方法:include <stdio.h>#include <stdlib.h>int main(){ int size=100;//最初为100个元素空间。 int *a = NULL; int i = 0; a = malloc(sizeof(int) * size); if(a ==...
关于在C语言 声明带有一个变长数组参数的函数
在C语言中,函数中要用数组做参数,可以采用三种方式,其中后两种均可适用于变长数组参数。1 直接以定长数组做参数,声明形式为:ret_type func(int a[100]);这里就是以100个元素的数组做参数的。2 声明时不带长度,即:ret_type func(int a[]);3 以指针替代数组,即:ret_type func(int *a);2,3两种均可以...
C语言怎样定义变长数组
”变长数组“确实是有的,是在C99标准才出现的。题主的写法没有错。变长指的就是可以用变量指定数组大小,而不是说数组大小可以在runtime改变。(”变长“这个这个翻译很怪啊...)写全的话应该是 int x = 2; //x定义并赋值,当然不一定是2char array[x];测试了一下,这样的代码在VC6....
C语言 可变长数组
你第一种写法:int n=1, a[n], i=0, j=0, k=0;这里你已经定义n = 1, 而a[n]也在该行定义。那么编译器在此就直接给a这个数列分配内存了。也就是说你a这个数组大小就确定了,即为1。我不知道你学了内存分配没有,简单给你讲解一下,具体你可以在网上搜。比如一个含有5个整数类型的...
C语言实现一个可变长的二维数组
scanf("%d",&a);int **p=new int*[a];int *n=new int[a];for (int i=1;i<=a;i++){ printf("请输入第%d行元素的个数:",i);scanf("%d",&n[i-1]);printf("\n");int q=n[i-1];p[i-1]=new int[q];for (int j=0;j<n[i-1];j++){ p[i-1][j]=1;} }...
c语言怎么输入任意长度的一个数组
其次,所谓的任意长度,其实就是可变长数组。那么,在事先不知道数组规模下,就要靠输入,来确定数组大小了。重点在于,要开辟多大的数组来存 一般有这么几种情况 1 直接开一个足够大的。 比如 虽然不知道有多大,但最大不超过1000个,那就可以直接开个1000元素的数组。2 动态分配, 使用malloc动态...
c语言中定义数组的时候可不可以缺省数组长度 ,在用户输入任意字符后让系...
(1)你可以定义一个长度长于需要的数组,例如: char str[500];或者 (2)运行时,输入长度,做动态分配,再输入数据 ,例如:char *str; int n;printf("input length n: "); scanf("%d",&n);str = malloc(sizeof(char) * n);或者 不知道长度,完全随机, 那么 (3) 用 ...
c51单片机,如何定义可变长数组?
用int定义长数组是16位的,没有问题的,可以定义的,也没有限制的。下面的程序是定义了30元素的。用单步执行来查看数组的值,用P1口显示高8位,用P0显示低8位,即可以赋值,也可以输出值的,没有问题,这个程序测试通过的。include <reg52.h> int number[30];unsigned char i;void main(){ for...
C语言数组长度可以是一个变量吗
不可以 因为不好编译 不过可以用malloc()申请一段堆内存 这个长度是可变的