赞
踩
目录
数组是一组相同类型元素的集合。
一维数组的创建
方法: type name[size] 类型 命名[大小] 例: int arr[10]; char p[5]; double a[8]; 注意: 在c语言中不可以进行下面所示的创建方法 int count = 10; int arr2[count];数组创建,[ ] 中要给一个常量才可以,不能使用变量。
二维数组的创建
方法: type name[size][size] 类型 命名[大小][大小] 例: int arr[10][6]; char p[5][8]; double a[8][3];二维数组由n个一维数组构成,可看作保存数组(一维数组)的数值。
数组的初始化指在创建数组的同时给数组的内容赋上合理的值。
int arr1[10] = {0,1,2}; int arr2[] = {0,1,2,3}; int arr3[5] = {0,1,2,3,4};数组的元素个数可以根据初始化的内容来确定。例如arr2在初始化时被赋予4个值,编译器会自动识别出arr2的初始化的个数。所以说数组在初始化的时候可以不指定数组的确定的大小。
char arr4[3] = {'a',98, 'c'}; char arr5[] = {'a','b','c'};char arr[]为字符类型的数组,所以在初始化时,需要给所需赋的值带上’ ’。若未带,则存的是ASCII码,例如arr4中的98,他代表的是b。我们运行看看。
注意!重点来了! 为什么在输出完abc还又继续输出了一段乱码呢?
这是因为在输出完abc后,编译器会继续识别数组后面的内存,直到找到’\0’才会停止。
我们修改一下代码再看看。
这次运行后就没有出现乱码!
char arr6[] = "abc";
arr6的大小是多少呢?是4!
我们看到,用” ”初始化时系统会自动给我们在最后面添加”\0”,所以arr6的大小是4!
int arr[3][4] = {1,2,3,4}; //arr[0][0]=1;arr[0][1]=2;arr[0][2]=3;arr[0][3]=4;arr[1][0]=···arr[2][4]=0; int arr[3][4] = {{1,2},{4,5}}; //arr[0][0]=1;arr[0][1]=2;arr[0][2]=0;arr[0][3]=0; //arr[1][0]=4;arr[1][1]=5;arr[1][2]=0;arr[1][3]=0; //arr[2][0]=0;arr[2][1]=0;arr[2][2]=0;arr[2][3]=0; int arr[][4] = {{2,3},{4,5}};
推荐初始化二位数组时带上花括号。
例如arr[3][4],可以理解为一个三行四列的数组,也可以理解为3个一维数组(每个一维数组里面有4个值)
在初始化时行可以省略,列不可。
数组是使用下标来访问的,下标是从0开始。
思想:整个数组占的字节数除以数组中的任一元素所占的字节数,既为数组的大小。
sizeof()函数可实现这一操作。
例:
//一维数组
#include <stdio.h> int main() { int arr[5] = {0}; int size = sizeof(arr)/sizeof(arr[0]);//具体实现代码 return 0; }//二维数组
#include <stdio.h> int main() { int arr[5][2] = {0}; int size = sizeof(arr)/sizeof(arr[0][0]);//具体实现代码 return 0; }
思想:通过循环的方法逐个输出,一维数组单循环,二维数组需要双循环。
一维数组的例子:
#include <stdio.h> int main() { int arr[10] = {1}; for(i=0; i<10; ++i) { printf("%d ", arr[i]); } return 0; }二维数组的例子:
#include <stdio.h> int main() { int arr[3][4] = {0}; int i = 0; for(i=0; i<3; i++) { int j = 0; for(j=0; j<4; j++) { printf("%d ", arr[i][j]); } } return 0; }
我们用接下来的代码,观察一维数组在内存中的存储。
#include <stdio.h> int main() { int arr[3]; int i = 0; for (i = 0; i < 3; i++) { printf("arr[%d]地址--->%p\n", i, &arr[i]); } return 0; }
仔细观察输出的结果,arr[0]到arr[1],arr[1]到arr[2],在内存中的地址依次递增了4,这是因为我们定义的arr数组是int型的,每个元素占4个字节,那么可以说arr[0]到arr[1]到arr[2]是连续递增的,所以随着数组下标的增长,元素的地址,也在有规律的递增。
由此可以得出结论:数组在内存中是连续存放的。
我们用接下来的代码,观察二维数组在内存中的存储。
#include <stdio.h> int main() { int arr[3][3]; int i = 0; for (i = 0; i < 3; i++) { int j = 0; for (j = 0; j < 4; j++) { printf("arr[%d][%d]地址--->%p\n", i, j, &arr[i][j]); } } return 0; }
通过结果我们可以分析到,其实二维数组也是像一维数组一样,线性连续且递增。
以下面的代码为例子:
#include <stdio.h> int main() { int arr[3]; printf("%d", arr[100]); return 0; }
输出arr[100],已经远远超出了我们所创建的arr[3],很明显的发生了越界,而我们的编译器并没有报错并且成功运行,这就要我们在平时的编程中要非常注意数组是否发生越界。
数组名代表什么?数组名代表数组首元素的地址(&arr和sizeof(arr)例外)。
我们来一段代码验证一下。
如果感觉看完这篇文章对您有一点点帮助,那就请留下您的赞
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/538761
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。