c++ 数组定义及初始化详解 C 提供了一种数据结构即数组该数组存储一个固定大小的由相同类型元素构成的顺序集合。数组中的元素存储在一个连续内存位置中,元素可通过数组索引访问, 最低地址对应于第一个元素最高地址对应于最后一个元素。声明数组例如声明固定长度的数组:123constintSize 5;intarr[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 typepointer 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是指向动态数据的指针因此可以删除此数据并可以将新数据分配给该指针。123456int* foo newint[5];// arr now points to a dynamic array of size 5delete[] foo;foo newint[10];// arr now points to a dynamic array of size 10delete[] foo;foo newint(5);// arr now points to a single int, of value 5.deletefoo;生成一个二维动态数组123int** a newint*[rowCount];for(inti 0; i rowCount; i)a[i] newint[colCount];总结静态数组和动态数组的区别1、静态数组的大小是在编译期间就确定并且分配的其内存在使用结束后由计算机自动释放效率高动态数组是在程序运行时由程序员根据实际需要从堆内存中动态申请的使用结束后由程序员进行释放效率低。2、对静态数组进行sizeof运算时结果是整个数组的大小而对动态数组进行sizeof运算时因为地址位数为4字节,所以结果为常数4.3、从寻址的角度来说静态数组采用的是直接寻址而动态数组都是两次寻址这和动态数组本身实现是有关系的。静态数组的变量本身就是数组第一个元素的地址。动态数组的变量存放的是一根指向到申请空间的首址指针。int arr[Size] 中arr本身就是一个内存地址,而int *foo中foo是指针,指向了一个地址。补充知识c、c中数组初始化默认值如何为01、做全局变量int sum[1000006];//初始化设默认值为02、做局部变量默认值只能设为0且只有在初始化时才能设为0sum[100]{0};这么写就是错的如果设为1则只是sum[0]是1其他默认全为0int sum[100]{0};//只能设为03、遍历赋值实际意思和循环赋值0是一样的只不过这个是库封装好了的方法。#include cstring//必须引用memset(sum,0,sizeof(sum));以上这篇c 数组定义及初始化详解就是小编分享给大家的全部内容了