c++ 数组定义及初始化
C ++提供了一种数据结构,即数组,该数组存储一个固定大小的由相同类型元素构成的顺序集合。 数组中的元素存储在一个连续内存位置中,元素可通过数组索引访问, 最低地址对应于第一个元素,最高地址对应于最后一个元素。
声明数组

例如
声明固定长度的数组:
const int Size = 5;
int arr[Size] = {3, 6, 9, 12, 15};
arr[3] = 42;
注意:方括号[]中的内容(表示数组中元素的数量)必须是一个常量表达式,因为数组是静态内存块,必须在编译时确定大小,然后程序才能运行。
初始化数组
int arr[] = { 10, 20, 30, 40 }
声明固定长度的数组同时初始化
const int Size = 5;
int arr[Size] = { 10, 20, 30, 40 }
上述声明方式用来定义一个静态数组,静态数组所需内存大小要在编译时就确定下来,数组被分配在栈上. 但是在某些情况下,只能在运行时确定程序的内存需求。 例如,何时需要存储空间取决于用户输入。 在这些情况下,程序需要动态分配内存,为此C ++语言将操作符new和delete集成在一起。
动态数组
使用操作符new分配动态内存。 new之后是数据类型说明符,如果需要一个以上的元素序列,则在括号[]中包含这些元素的数量。 它返回一个指向分配的新内存块开头的指针。 其语法为:
pointer = new type
pointer = new type [number_of_elements]
举例:
int * foo;
foo = new int [5];
在这种情况下,系统会为int类型的五个元素动态分配空间,并返回一个指向序列第一个元素的指针,该指针被分配给foo(一个指针)。 因此,foo现在指向一个有五个int类型的元素的有效内存块。

在这里,foo是一个指针,因此,可以使用表达式foo [0]或表达式* foo(两者都是等效的)访问foo指向的第一个元素。 可以使用foo [1]或*(foo + 1)来访问第二个元素,依此类推...
静态数组和动态数组最重要的区别是,静态数组的大小必须是一个常量表达式,因此必须在设计程序时确定其大小,然后再运行它,而由new执行的动态内存分配则可以 在运行时使用任何变量值作为大小分配内存。因为foo是指向动态数据的指针,因此可以删除此数据,并可以将新数据分配给该指针。
int* foo = new int[5]; // arr now points to a dynamic array of size 5
delete[] foo;
foo = new int[10]; // arr now points to a dynamic array of size 10
delete[] foo;
foo = new int(5); // arr now points to a single int, of value 5.
delete foo;
- 生成一个二维动态数组
int** a = new int*[rowCount];
for(int i = 0; i < rowCount; ++i)
a[i] = new int[colCount];
总结:
静态数组和动态数组的区别
1、静态数组的大小是在编译期间就确定,并且分配的,其内存在使用结束后由计算机自动释放,效率高;动态数组是在程序运行时,由程序员根据实际需要从堆内存中动态申请的,使用结束后由程序员进行释放,效率低。
2、对静态数组进行sizeof运算时,结果是整个数组的大小,而对动态数组进行sizeof运算时,因为地址位数为4字节,所以结果为常数4.
3、从寻址的角度来说,静态数组采用的是直接寻址,而动态数组都是两次寻址,这和动态数组本身实现是有关系的。静态数组的变量本身就是数组第一个元素的地址。动态数组的变量存放的是一根指向到申请空间的首址指针。int arr[Size] 中arr本身就是一个内存地址,而int *foo中foo是指针,指向了一个地址。
c++ 数组定义及初始化的更多相关文章
- js二维数组定义和初始化的三种方法总结
js二维数组定义和初始化的三种方法总结 方法一:直接定义并且初始化,这种遇到数量少的情况可以用var _TheArray = [["0-1","0-2"],[& ...
- Java数组定义及初始化
数组定义及初始化 数组这玩意是一种用于存放数据最常见数据结构. 数组的的概念及注意点 数组要求所有的数组元素具有相同的数据类型,且只能存在一种数据类型,要多专一有多专一. 数据类型既可以是基本类型也可 ...
- C++中数组定义及初始化
一.一维数组 静态 int array[100]; 定义了数组array,并未对数组进行初始化 静态 int array[100] = {1,2}: 定义并初始化了数组array 动态 int* ar ...
- verilog数组定义及其初始化
这里的内存模型指的是内存的行为模型.Verilog中提供了两维数组来帮助我们建立内存的行为模型.具体来说,就是可以将内存宣称为一个reg类型的数组,这个数组中的任何一个单元都可以通过一个下标去访问.这 ...
- 各种C#数组的定义和初始化
各种C#数组的定义和初始化2009-08-26 18:28 岁月联盟 字号:T | T一键收藏,随时查看,分享好友!本文介绍了C#数组定义和初始化,包括一维数组.交错数组和多维数组,供大家参考.AD: ...
- C#的一维数组和二维数组定义方式:
一维数组: //一维数组定义与初始化 ,, };//第一种方式 , , }; //第二种方式 int[] one3; //第三种方式 one3=,,}; 二维数组: //二维数组定义与初始化 //不规 ...
- C 语言字符数组的定义与初始化
1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'} ...
- C语言中二维字符数组的定义和初始化
本篇日志关于二维字符数组的定义和初始化.我相信这篇文章属于菜鸟级的,高手请直接无视. 一般来说,我们可能会希望定义一个二维字符数组并且在定义的时候就用一些字符串来初始化它.比如说: ][MAX_LEN ...
- C++定义和初始化数组以及memset的使用(转)
一.一维数组 静态 int array[100]; 定义了数组array,并未对数组进行初始化 静态 int array[100] = {1,2}: 定义并初始化了数组array 动态 int* ar ...
随机推荐
- iframe 父子互传消息,父页面滚动,子页面触发父页面高度
https://blog.csdn.net/qq_38366657/article/details/81538145 // 父页面的js<iframe id='TopHeader' src=&q ...
- CentOS 7.6.1810 运行pupperteer
故障排除 安装puppeteer,使用cnpm 解决依赖 $ yum -y update $ yum install -y pango libXcomposite libXcursor libXdam ...
- Win10安装VSCode并配置Python环境 完整版超详细简单【原创】
我们分为三个步骤进行: 一.下载VSCode 二.配置Python环境 三.测试Python 一.下载VSCode 1.打开国内镜像vscode下载地址,即可自动下载:https://vscode.c ...
- Vue 组件的通信方式都有哪些?
说一下 Vue 组件的通信方式都有哪些?(父子组件,兄弟组件,多级嵌套组件等等) 一.父组件向子组件传值 二.子组件向父组件传值 三.兄弟组件传值 四.跨组件 一.父组件向子组件传值 1.1props ...
- Android 之 EditText
1.使用EditText 的SetInput的方法设置输入类型: 1 //输入类型为没有指定明确的类型的特殊内容类型 2 editText.setInputType(InputType.TYPE_NU ...
- flask启动常见问题1:sqlalchemy.exc.ArgumentError: Mapper mapped class UserCode->data_system_user_email could not assemble any primary key columns for mapped table 'data_system_user_email'
我的描述:当我编辑好flask以后,ORM映射数据库完成,启动项目时,发生现象: 解决: 看字面的意思是主键导致的错误,于是我查看了data_system_user_email的键参数配置,发现表没有 ...
- @RestController和@Controller
1.使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面 若返回json等内容到页面,则需要加@ResponseBody注解 2 ...
- 2021-2-25:对于 Java MMAP,如何查看文件映射脏页,如何统计MMAP的内存大小?
我们写一个测试程序: public static void main(String[] args) throws Exception { RandomAccessFile randomAccessFi ...
- vue之下拉菜单Dropdown的使用
通过组件slot来设置下拉触发的元素以及需要通过具名slot为dropdown 来设置下拉菜单.默认情况下,下拉按钮只要hover即可,无需点击也会显示下拉菜单. <el-dropdown> ...
- MySQL学习笔记(六)
好耶,七天课程的最后一天!我当然还没精通了,,,之后可能是多练习题目然后再学学其他的东西吧.mysql新的知识点也会在后面补充的. 一.杂七杂八补充 1. 当多个函数共用同样的参数时,可以转变成类进行 ...