C语言 数组
小刘好好学习 人气:0接着上次的操作符的详解,让我们来简单了解C语言里的数组。
一维数组的创建和初始化
1.数组的创建
数组是一组相同类型的元素的集合。
2.数组创建方式
type_t(数组类型) arr_name(数组名) [const_n](用来指定数组大小)
3.数组的初始化
数组的初始化是在其定义的时候就应该执行的,如:为5个已经知道的整形数据进行排序
//正确 int Arr[5] = { 1, 2, 3, 4, 5 }; //而不能用下面这种方式 int Arr[5]; Arr[5] = { 1, 2, 3, 4, 5 };
因为对于 Arr[5] = 来说,这是一个赋值操作,将右值赋值给左值,一切常数、字符和字符串都是右值。在这里 { 1, 2, 3, 4, 5 }; 并不是右值的一种,所以这是错误的。
另一个错误是,Arr[5] 下标为 5 这个元素实际上并不存在的属于数组的越界。
有数字类型的初始化,自然也有字符类型的初始化
字符类型初始化的两种方式:
char arr[5]={'a','b','c','d','e'}; char arr[5]= "abcde ";
1.空字符是字符串的终止符(空字符本身不是字符串的一部分,所以字符串的长度并不包含空字符)
2.操作字符串时,必须保证字符串以空字符(\0)结尾(不以空字符结尾的字符序列,不是字符串)。
一维数组的使用
例
用单引号形式初始化的数组代表只有这些数据,并且在末端不包含\0
总结
- 数组是使用下标来访问的,下标是从0开始。
- 数组的大小可以通过计算得到。
- Int sz = sizeof(arr)/sizeof(arr[0])
一维数组的存储
当我们定义了长度为5的整型数组,操作系统就会为其分配连续的五个内存地址。
这些地址用来存放数据,每一个地址所占的字节是数组的数据类型所决定的。 如int类型的每一个地址占据着4个字节,double类型的8个。
因为每个整形大小为四个字节,所以如图每个地址间隔为4。
讲完了一维数组的知识点,让我们简单了解一下二维数组
二维数组的创建与初始化
1.二维数组的创建
第一个括号指定行,第二个括号指定列
可以只对部分元素赋值,未赋值的元素自动取“零”值。例如:
int arr[3][4]={1,2,3,4,5}
2.二维数组的初始化
第一行:123 第二行:45
二维数组的列不能省略行可以在括号内大括号分割明确时省略
二维数组的存储
二维数组在内存中的存储
如果定义一个这样的二维数组int a[3][4]={undefined{1,3,5,7},{9,11,13,15},{17,19,21,23}};
则其在内存中的表示可能下面这样的。
由上图可以看出,在内存中二维数组是按照行主序进行存储的,从内存的角度上看,二维数组本质就是一个一维数组。如果把二维数组的每一行看成一个整体,即看成一个数组中的一个元素,那么整个二维数组就是一个一维数组。而二维数组的名字代表二维数组第0行的首地址(注意它是代表一行元素的首地址,而不是第0行第0列元素的首地址,虽然是相等的,但不能这么理解,所以在没有强制转换的情况下,二维数据要么通过行指针进行参数传递,要么通过二维指针进行参数传递)。
数组的越界
这里讲的数组长度存在一个界,而一旦超过了这个大小,就会发生一些未知的错误,也就是所谓的越界
这里用一个例子来说明下越界后数组内部的值的情况:
根据代码可知,当数组越界后,其数值是不确定的。
总结
以上就是初阶数组的基本内容。如果你读到了这里,非常感谢你能看完的文章!!!
加载全部内容