C语言 数组在定义时长度不能用变量
问题描述
在数组定义的时候,括号中定义数组长度使用的是整形变量,在dev c++和codeblocks上编译后,没有显示语法错误。但是在普通的oj提交平台上测试后显示语法错误。
int n;
scanf("%d",&n);
int a[n];
上面的代码原意是想创建一个动态数组,输入的n有多少,数组的长度就有多长。
原因分析:
C语言中数组定义长度的时候只能用整形常量,不能用整形变量。
原因在于c语言中所有变量空间都是在程序运行之初向系统申请的,包括指针、数组(除了一些动态申请方式如malloc函数),没有申请的空间系统是不允许读写的。也就是说,在程序运行之初,输入操作之前,定义的数组就先要向系统申请自身大小的空间,如果此时数组的大小是变量定义的,则变量的数值不能确定,则不能确定数组大小,也就无法申请,故不允许。
而在dev c++等编译软件上运行上面的代码,不报错是因为这些编译器的容错性很强。
例如:
如果把代码上面的代码改成下面的形式,在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语言 数组在定义时长度不能用变量相关推荐
- C语言-数组的定义和引用
数组的定义和引用 1. 一维数组.二维数组的定义.初始化和引用方法 数组数据的特点: 数组: 一般形式:类型说明符 数组名[常量表达式]: 说明: 一维数组的引用 1. 引用方式: 二维数组 二维数组 ...
- c语言中数组的概念及作用,C语言数组的定义及其使用方法
什么是数组? 在我们学习数组前先让我们介绍一下c语言中数组是什么?数组就是一个个元素按照一定顺序排列的集合.它将数据从最低的内存地址保存到最高的内存地址. 声明一个数组 c语言规定了声明数组的格式: ...
- c#数组赋初值_c语言数组的定义及赋值
一维数组的定义方式如下:类型说明符 数组名[常量表达式]; 例如:int a[5]; 它表示定义了一个整型数组,数组名为 a,定义的数组称为数组 a. 此时数组 a 中有 5 个元素,每个元素都是 i ...
- c语言数组宏定义标识符,C语言学习笔记--预编译/宏定义/数组/参数传递/函数指针...
目录 预编译 值传递.指针传递.引用传递 数组 typedef 函数指针 预编译 预编译又叫预处理.预编译不是编译,而是编译前的处理.这个操作是在正式编译之前由系统自动完成的.#define 和 #i ...
- C#二维数组的定义与长度获取
这里说两种情况. 第一种情况: 数组定义: int[,] ids = new int[5,8]; //这种方法得到的是一个5*8的矩阵 长度获取: //获取一维数组的长度 int lenA = ids ...
- JS 二维数组的定义及长度判断
动态定义二维数组: 1.先定义一维: var arr = new Array(); 2.定义二维: arr[0] = new Array(); arr[1] = new Array(); 3.给数组赋 ...
- C语言数组 :用户输入一个数, 我要用这个数当数组的长度。怎么办呢
C语言不支持动态数组,也就是说,数组在定义时就要指定长度,把输入数作为它的长度那就说明定义时没有指定长度,这是不合法的. 使用 指针+动态分配malloc int* p;int n;scanf(&qu ...
- c语言如何定义比较大的数组_C语言:数据结构-数组的定义、逻辑结构和特点
一维数组 (1)定义 一维数组是属于同一种数据类型的元素(变量)的有限序列,其元素称为数组元素,每个元素有统一的名称(数组名),有按序编号的唯一的下标.序列中元素的个数称为数组的长度. 例:a=a0, ...
- 舍友打了几把英雄联盟,C语言数组归纳(一)就被完成了
文章目录 前言 正文 一.数组的引出及介绍 二.数组的分类 1.按维数 2.按元素类型 三.一维数组 1.一维数组的定义和初始化 1.一维数组定义格式: 2.一维数组初始化 2.一维数组元素的使用 1 ...
最新文章
- 基于激光点云语义信息的闭环检测
- 从hook007学习dll劫持自启动方式
- springcloud上传文件_Spring Cloud实战:服务链路追踪Spring Cloud Sleuth
- eclipse总跳出password required的框解决办法
- mysql+地图网格数据下载_echarts 中国各省市 echarts地图数据,含世界地图
- php.ini在哪里 微赞_虚拟主机php.ini在哪?怎么查看php.ini在哪
- (记录合并)union和union all的区别
- 基于Windows字库的点阵数据提取方法
- android studio for android learning (十七) Toast使用详解
- 百度文库收费文档下载方法
- win10打开计算机黑屏怎么办,win10系统开机就一直黑屏无法进入桌面的解决方法...
- 数学建模之排队论模型及代码
- Win7 蓝牙耳机无法使用
- Hadoop 十年解读与发展预测(插图+排版)
- ES(elasticsearch)测试数据
- ios9企业证书提示“未受信任的企业级开发者”解决方法
- 山东大学项目实训开发日志——基于vue+springboot的医院耗材管理系统(4)
- C语言笔记 隐藏光标函数 带注释(详细)
- 前端面试题之浏览器原理篇
- 什么是DML与DDL
热门文章
- Android HIDL机制学习
- 2023年最新水果DAW编曲软件fl studio21 macOS - 21.0.3.3036简体中文版免费下载支持苹果M1/M2处理器
- OneAlert携手钉钉快速构建IT运维on-call机制
- C#---面向对象(3)
- 【华为机试真题Java】报数游戏
- re.match()正则表达式
- GD32 寄存器操作按键点灯(裸机开发)
- 阿里云短信服务API怎么调用
- linux安装宝塔一半挂了怎么再继续,宝塔安装到一半,连接断开了
- 技术总监Sycx的故事