永发信息网

C语言 可变长数组

答案:3  悬赏:0  手机版
解决时间 2021-02-13 06:05
这是错误的代码

//求一组数据中的最大值
#include <stdio.h>
#include <stdlib.h> //system()
int main(void)
{

int n=1, a[n], i=0, j=0, k=0;
printf("请输入数组长度:");
scanf("%d", &n);
for( i = 0; i < n; i++ ) //输入数组元素值
{
printf("%d=", i+1);
scanf("%d", &a[i]);
}
for( j = 0; j < ( n-1 ); j++ ) //起泡法
for( i = 0; i < ( n - 1) - j ; i++ )
if(a[i] < a[i+1])
{
k = a[i];
a[i] = a[i+1];
a[i+1] = k;
}
printf("按由大到小排列为:\n");
for( i = 0; i < n; i++ )
printf("%d\n", a[i]);
printf("此数列最大值为:%d\n", a[0]);
system( "pause" );
return 0;
}
我如果这么写的话,如果输入15,则程序运行错误,但是如果我将数组的声明改一下位置的话就没事了,请问是什么原因?

//求一组数据中的最大值
#include <stdio.h>
#include <stdlib.h> //system()
int main(void)
{

int n=1, i=0, j=0, k=0;
printf("请输入数组长度:");
scanf("%d", &n);
int a[n]; //修改
for( i = 0; i < n; i++ ) //输入数组元素值
{
printf("%d=", i+1);
scanf("%d", &a[i]);
}
for( j = 0; j < ( n-1 ); j++ ) //起泡法
for( i = 0; i < ( n - 1) - j ; i++ )
if(a[i] <= a[i+1])
{
k = a[i];
a[i] = a[i+1];
a[i+1] = k;
}
printf("按由大到小排列为:\n");
for( i = 0; i < n; i++ )
printf("%d\n", a[i]);
printf("此数列最大值为:%d\n",a[0]);
system( "pause" );
return 0;
}
最佳答案
我暂时保留我的看法!
全部回答
你放scanf函数前面,就表示申明了只有一个元素的数组,而放在它后面,就表示数组大小是随着你输入的数字 的不同而变化的,放前面之所以出错时数组溢出越界了
你后面这个程序也是有问题的,只是“碰巧”可以运行而已。 这个“碰巧”的意思是你的程序只有一个main函数,且你在声明了int a[n]之后没有声明别的变量,这样当你用a[14]访问到越界的数组的时候也能按照你的预想运行,不信的话可以在int a[n]之后声明别的变量,并在“printf("按由大到小排列为:\n");” 这个语句之前去改变它的值,这样肯定就会改变到数组a里面元素的值。 实际编译器在编译下面的程序的时候,预先只是按n=1来给数组a分配了一个int空间而已。 你的程序应该要用malloc/free来动态申请数组a的内存空间,记得使用完后并释放它。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
莲花商业街地址在什么地方,想过去办事
求噬血狂袭第二季百度云链接!
1000以下的显卡 求推荐 内存8G是比4G好么?
奥奇怎么去啊,有知道地址的么
冬天空调可以开自动模式吗,大家对此有了解吗
黑龙江省七台河公路路政管理处勃利所在什么地
女员工孕早期有先兆流产迹象需在家保胎的劳动
金海加油站我想知道这个在什么地方
两个月大的宝宝一阵一阵的咳嗽,是怎么回事
磨辊拉丝这个地址在什么地方,我要处理点事
以致妈妈的一封信为题写一篇600字的作文
饰尚美全国连锁地址有知道的么?有点事想过去
女孩问我吃早餐了吗怎么回复
为什么小孩那么萌
求轻小说《变态王子与不笑猫》
推荐资讯
中国建设银行上海龙州路支行地址有知道的么?
戴尔灵越很多都是低压CPU,但显卡内存却都挺
观音塘社区居委会地址在哪,我要去那里办事
幻影pin一直卡在初始化怎么办
晨光托管辅导中心(聊城高唐县)地址有知道的么
谁能教我一下怎么把可口可乐的标志(cocacola
聚满源农家饭庄地址在哪,我要去那里办事
玛纳斯湖火车站地址在哪,我要去那里办事
中国移动手机连锁卖场寅阳店地址在哪,我要去
自己供暖的楼房能改为统一供暖吗
中堂有什么好玩的地方
元坝洁士家政服务部怎么去啊,我要去那办事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?