数组的定义、初始化和使用
数组的概念:
数组是在内存中连续存储的具有相同数据类型的一组数据的集合。
一维数组的定义:
定义方式:
类型说明符 数组名[常量表达式];
例如:
int a[5];
一维数组初始化:
一维数组的初始化可以使用以下方法实现:
定义数组时给所有元素赋初值:完全初始化
int a[5] = {1, 2, 3, 4, 5};
可以只给一部分元素赋值:不完全初始化
不完全初始化时,没有被初始化的元素自动为0;
int a[5] = {1, 2};
如果定义数组时就给数组中所有元素赋初值,那么就可以不指定数组的长度,因为此时元素的个数已经确定了。编程时我们经常都会使用这种写法,因为方便,既不会出问题,也不用自己计算有几个元素,系统会自动分配空间
int a[] = {1, 2, 3, 4, 5};
求解数组的长度:
求解数组长度往往要用到两个函数,strlen或者sizeof
strlen求解数组长度
strlen是用来求一个字符串(string)的长度,因此strlen不能用来求int类型的数组长度,只能求char类型的数字长度。
例如:
char arr6[] = "abc";//没有定义元素个数,用双引号定义3个字符,末尾数组会自动加上结束标志(\0)printf("length arr6 = %d\n", strlen(arr6));char arr7 [10] = "abc";//定义10个元素个数,用双引号赋值三个字符串,其余7个元素均自动定义为\0printf("length arr7 = %d\n", strlen(arr7));char arr8 [10] = {'a', 'b', 'c'};//定义10个元素个数,用大括号和单引号赋值三个字符串,则数组只含有三个字符,剩余7个均为\0printf("length arr8 = %d\n", strlen(arr8));char arr9 [10] = {'a', 98, '98'};//char定义数组,元素中出现没有用单引号的数字,会根据ASCII码输出字符printf("length arr9 = %d\n", strlen(arr9));char arr10 [] = {'a', 'b', 'c'};//没有定义元素个数,用大括号定义字符串,数组的元素个数则只有三个,结尾没有数组结束标志(\0)printf("length arr10 = %d\n", strlen(arr10));
5.3.1 二维数组定义方式
二维数组定义的四种方式:
数据类型 数组名[ 行数 ][ 列数 ];
数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };
数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};
建议:以上4种定义方式,利用第二种更加直观,提高代码的可读性
示例:
int main() {//方式1 //数组类型 数组名 [行数][列数]int arr[2][3];arr[0][0] = 1;arr[0][1] = 2;arr[0][2] = 3;arr[1][0] = 4;arr[1][1] = 5;arr[1][2] = 6;for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){cout << arr[i][j] << " ";}cout << endl;}//方式2 //数据类型 数组名[行数][列数] = { {数据1,数据2 } ,{数据3,数据4 } };int arr2[2][3] ={{1,2,3},{4,5,6}};//方式3//数据类型 数组名[行数][列数] = { 数据1,数据2 ,数据3,数据4 };int arr3[2][3] = { 1,2,3,4,5,6 }; //方式4 //数据类型 数组名[][列数] = { 数据1,数据2 ,数据3,数据4 };int arr4[][3] = { 1,2,3,4,5,6 };system("pause");return 0;}
总结:在定义二维数组时,如果初始化了数据,可以省略行数
5.3.2 二维数组数组名
查看二维数组所占内存空间
获取二维数组首地址
示例:
int main() {//二维数组数组名int arr[2][3] ={{1,2,3},{4,5,6}};cout << "二维数组大小: " << sizeof(arr) << endl;cout << "二维数组一行大小: " << sizeof(arr[0]) << endl;cout << "二维数组元素大小: " << sizeof(arr[0][0]) << endl;cout << "二维数组行数: " << sizeof(arr) / sizeof(arr[0]) << endl;cout << "二维数组列数: " << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;//地址cout << "二维数组首地址:" << arr << endl;cout << "二维数组第一行地址:" << arr[0] << endl;cout << "二维数组第二行地址:" << arr[1] << endl;cout << "二维数组第一个元素地址:" << &arr[0][0] << endl;cout << "二维数组第二个元素地址:" << &arr[0][1] << endl;system("pause");return 0;}
总结1:二维数组名就是这个数组的首地址
总结2:对二维数组名进行sizeof时,可以获取
数组的定义、初始化和使用相关推荐
- 【C 语言】数组 ( 数组本质 | 数组长度定义 | 数组初始化 | 编译时初始化 | 显式初始化 - 重置内存 )
文章目录 一.数组本质 二.数组长度定义 三.数组初始化 1.编译时初始化 2.显式初始化 ( 重置内存 ) 一.数组本质 数组本质 : 类型角度 : 从 数组元素 类型角度分析 , 数组是 相同类型 ...
- 变量初始化赋值_java数组的定义及初始化
数组 数组有两种定义形式. 数组的定义: 这一种形式使用的频率高,推荐使用. int[] ints={1,2,3}; 第二种形式(容易使人混淆因为在开发中可能把这个看成一个数组类型而不是变量名) in ...
- 1.2 一维数组的定义、赋值和初始化
当数组中每个元素都只带有一个下标时,这种数组就是"一维数组".一维数组(one-dimensional array)实质上是一组相同类型数据的线性集合,是数组中最简单的一种数组. ...
- C#二维数组的定义和初始化
二维数组的定义和初始化: 初始化的值是1-360,用两层for循环,最后用richTextBox显示数据... 结果:
- byte初始化并赋值_一位数组的定义、赋值和初始化.note
当数组中每个元素都只带有一个下标时,这种数组就是"一维数组".一维数组(one-dimensional array)实质上是一组相同类型数据的线性集合,是数组中最简单的一种数组. ...
- java学习总结(16.06.03)java中数组的定义和初始化
刚开始接触java的数组时,我觉得java的数组和c++的数组虽然大致上差不多但细节上差很多,我也因此差点混乱了.后来自己仔细理了一下发现java和c++的数组只在定义和初始化上存在几点差异,而其他部 ...
- 【好题分享】适合C++初学者(数组的定义与初始化)
1. 关于一维数组初始化,下面哪个定义是错误的?( ) A.int arr[10] = {1,2,3,4,5,6}; B.int arr[] = {1,2,3,4,5,6}; C.int arr[] ...
- C语言之:数组的定义和初始化必备练习题
1. 作业标题(688) 关于一维数组初始化,下面哪个定义是错误的?( ) 作业内容 A.int arr[10] = {1,2,3,4,5,6}; B.int arr[] = {1,2,3,4,5,6 ...
- C语言基础入门48篇_30_二维数组的定义与使用(二维数组的定义:type 数组名[行][列]、二维数组的初始化、二维数组的引用)
1. 二维数组的定义 type 数组名[行][列] 2. 二维数组的初始化 2.1 全部初始化为0 char chAry[2][3] = { 0 }; 实例: #include <stdio.h ...
- 2022-04-24_数组的定义和初始化
文章目录 第 1 题(单选题) 第 2 题(单选题) 第 3 题(单选题) 第 4 题(单选题) 第 5 题(单选题) 第 6 题(单选题) 第 7 题(单选题) 第 8 题(单选题) 第 9 题(编 ...
最新文章
- 你不知道的console.log
- DeepMind开源强化学习环境,灵活可配置,计算资源有限的小型实验室也能用
- poj 1741 Tree
- 漫话:程序员要失业了??!机器人开始在GitHub上修Bug了。
- 前端请求进化之路--从form表单到JSONP
- 检索有关计算机系统功能设计方面的文献,文献检索系统
- windows下创建vp9的VS版本
- 【kuangbin专题】Manacher
- C# List集合排序、去重方法小结
- 2019电子设计大赛电磁曲射炮制作分享
- 恢复数据的原理和方法
- java opts配置_JAVA_OPTS设置
- Newkirk effect and Morton effect
- lisp 画伯努利双纽线_伯努利双纽线的应用有哪些?
- 2019蓝桥杯国赛总结
- 腾讯云能装安卓虚拟机么
- centos 7, 8 的区别
- 【JAVA 求差集】
- android studio开发环境搭建,国内服务器代理下载android sdk
- PAP认证与CHAP认证的区别
热门文章
- H264_Lite高清视频编码器/解码器IP核(FPGA/ASIC通用)
- 【cec14_func】修改版
- 多多情报通:拼多多48小时发货怎么设置?最晚多久发货?
- kafka javax.management.InstanceAlreadyExistsException: kafka.consumer:type=app-info,id=consumer-1
- 题目:学生成绩管理系统设计(C语言程序设计期末作业)
- 赛门铁克网络版杀毒软件SEP布署小记
- Vue 仿淘宝购物车
- 穷爸爸与富爸爸读后感(3)
- 医学知识-DDR数字化成像-X平片
- 【Java】练习题库 程序阅读题