问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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()申请一段堆内存 这个长度是可变的

c语言可变长数组 c语言变长数组怎么用 可变长数组 数组的长度可变吗 c99可变长数组 java可变长度数组 c可变长度数组 java定义可变长度数组 Java实现长度可变数组
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
7.1声卡哪个好 word方框里打√符号 用x5做视频,怎么在两个片段间添加照片?? 怎么用剪映给视频添加片段? ...要打满水。已知水管压力是1,5。请问在罐底往上打水快。?还是_百 ... 大力丸在药店叫什么名字 倩女幽魂手游大力丸小力丸怎么获得 哪里有大力丸卖?大约价线是? 泉城是哪里泉城指的是哪座城市 C盘的磁盘清理时"系统队列中的windows错误报告"文件可以删除吗? C语言如何定义一个可变大小的数组 c语言中长度可变的数组? 电脑开机进不去了系统怎么办? 什么叫保税模式? 中国保税区的特性 中国有保税区吗?一个国家的保税区对这个国家有什... 中国保税区是哪几个? 请问vps换ip 跟拨号断开连接换ip有什么区别 保税制度和可以起到哪些作用?请举例说明 有没有国外动态ip拨号的vps?开了25端口的·可以发邮... 中国保税区的简介 vps服务器可以手动变更ip吗 中国保税港区有那几个? 万变vps和ip软件有什么区别? 拨号vps服务器哪家好 换IP 保税区 是什么意思,在保税区有什么好处。有什么坏... Vultr VPS更换IP地址的方法是什么? 家里拨号换IP不行 有没有推荐vps 我想买 保税区是干嘛的? 为什么有些vps可以拨号换ip 有些则不能 C语言中怎样定义一个可变大小的数组呢?我想根据自... 如何在用c语言定义一个可变数组? C语言可变数组的初始化问题!求大哥帮助 int main(){ 可变长数组在c里面怎样定义 C语言支持可变长数组吗,如果可以请举例书名。谢谢 如何声明可变长度的数组 C语言 C语言可变长数组问题 C语言程序,需要用到可变长度的数组该怎么办? c语言可变数组用的多吗 c 如何定义动态数组? C语言如何定义动态数组 c语言 动态数组 C语言中定义动态数组的方法 c语言中如何定义动态数组 c 怎么创建动态数组 c语言动态数组如何扩充空间 c语言动态数组 OCR是什么?如果应用? ocr与扫描有什么区别 ocr是什么意思