数组跟变量不一样 变量只能储存一个数据 如一个字符 而数组能储存多个数据 (所以字符串是存储在数组中的) 注意数组中元素类型要相同
一维数组创建
一维数组的创建 例子如下 int name[5]
一维数组的初始化
其中一维数组中[]也可以省略 如int arr[]={1,2,3,4} []中默认里面为4
一维数组也是有类型的 跟变量不一样 变量是字符类型 浮点数类型 整数类型 等 而一维数组是除了数据类型 还有[] ,如下
数组可以跟变量一样不初始化 但是后面要跟变量一样都需要赋值 否则会产生bug (运行错误) 之所以要知道这个 因为别人写代码时可能会这样 (要看懂别人写的代码) , 而我们自己写代码无论是变量还是数字都要初始化 这是个很好的编程习惯 ,自己要习惯。
一维数组的使用(一维数组下标)
对于数组的赋值我们要用到循环 切不可直接将其arr[10]={某些具体数} 因为除去创建数组时arr[10]是整个数组 下面的arr[某个值]都是其中的某个元素 所以并不能直接将这些数赋值到数组中 需要一个一个来将我们要输入的数赋值到其中的一个一个元素中 就要用到循环语句去赋值
数组赋值要用到循环语句(目前学的太少 只有循环语句赋值这个方法 ,之后学到指针可能会有新的赋值方法)
这次又学到了一个新的操作符 然后如果你想用到数组中的元素 你就可以用数组名[] ,如arr[4], 4指的是下标,且arr[]只能返回出一个元素的值 也就是说[]里面只能有一个下标
而在下图是对于数组的输入和输出
浅谈一维数组在内存中的存储
计算机中的数据 都会放到内存中进行处理 并且内存中的每一个字节单位都会被编号(给地址 这个部分跟指针有关) 其中在创建一维数组时会在内存中申请一片空间 如一个 int[5]会申请一个20字节的空间 其中每四字节里有一个整数 并且给其一个下标(下标是数组在申请内存后添加的 是数组特有的) 并且每次执行时数组申请的内存位置都不一样 如下图所示
%p是一个新学的占位符 是关于地址的占位符 用&能求地址(后期指针会牵涉到地址这类 这里浅谈)
sizeof计算一维数组
sizeof()是一个操作符 返回的值是size_t(整数)形式 (其中对应占位符形式是%zd) 其中单位是字节(内存的基本单位); 内存最小单位是比特 一个比特放一个0或者1 (因为数据是以二进制形式储存) 一个字节含有八个比特
其中arr是整个数组 arr[0]是数组中第一个元素 。
二维数组的概念
二维数组的创建
二维数组的初始化
初始化省略的情况分类
二维数组的使用(二维数组的下标)
以上就是二维数组的下标介绍
这是二维数组的输入和输出
二维数组在内存中的存储
由这可知 对于二维数组在内存中的占用情况 并不是上述的长方形 ,二维数组用长方形形状只是为了我们更好地理解,真实占用情况是跟一维数组一样都是一条长方格
二维数组跟一维数组的元素都是在内存中连续存放 甚至三维更高维数组的元素都是连续存放
当设置了一个arr为二维数组时 int arr[3][5] ={0} arr[1]就是其中的一维数组的数组名
了解了这些更有利于学习指针
变长数组
其中由于[]中是变量,所以不能初始化 只能强行在后面将其赋值 (这是强制的)而对于正常的来说都是可以初始化 (初始化是个良好的编程习惯)
只是现在变长数组在vs上不支持使用 vs不支持在[]上填入变量 (好多编译器都不支持变长数组)做题网站还可以使用这个(因为其带着gcc编译器)
此方法相比我们平时方法 更加灵活更容易变化去操作