C语言 数组在定义时长度不能用变量

问题描述

在数组定义的时候,括号中定义数组长度使用的是整形变量,在dev c++和codeblocks上编译后,没有显示语法错误。但是在普通的oj提交平台上测试后显示语法错误。

int n;

scanf("%d",&n);

int a[n];

上面的代码原意是想创建一个动态数组,输入的n有多少,数组的长度就有多长。

原因分析:

C语言中数组定义长度的时候只能用整形常量,不能用整形变量。

原因在于c语言中所有变量空间都是在程序运行之初向系统申请的,包括指针、数组(除了一些动态申请方式如malloc函数),没有申请的空间系统是不允许读写的。也就是说,在程序运行之初,输入操作之前,定义的数组就先要向系统申请自身大小的空间,如果此时数组的大小是变量定义的,则变量的数值不能确定,则不能确定数组大小,也就无法申请,故不允许。

而在dev c++等编译软件上运行上面的代码,不报错是因为这些编译器的容错性很强。

例如:

C语言 数组在定义时长度不能用变量_第1张图片

如果把代码上面的代码改成下面的形式,在dev c++编译器中就会出错。

int n;

scanf("%d",&n);

int a[n]={3,4.5};


解决方案:

C语言要想实现动态数组,就只能通过malloc函数动态分配空间

将        int a[n];

给成     int* a=(int *)malloc(sizeof(int)*n);

malloc函数的使用方法:

        malloc()函数返回的是所申请空间的头地址,malloc()中的参数为所申请空间字节大小,书写格式为sizeof(单独一个申请空间的类型)*【申请个数】

你可能感兴趣的:(数据结构与算法,c语言,开发语言)