每天进步一点点,坚持带来大改变!
你好,屏幕前的陌生朋友,学习的心让我们在这里相遇,让我们互相共勉,一起加油!!!
目录
1.数组
2.一维数组的创建和初始化
3.一维数组的使用
4.一维数组在内存中的存储
5.二维数组的创建初始化和使用
6.二维数组在内存中的存储
7.注:
8.一维数组和二维数组的数组名
1.一维数组数组名:
2.二维数组的数组名
3.数组名传参
9.总结
1.数组
概念:数组是一组相同类型元素的集合
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int arr[10]:表示一个一维整形数组,数组有是个元素,每个元素是整形;
2.一维数组的创建和初始化
创建:例
整形数组:int arr[10];
字符数组:char str[10];
数组的创建:数据类型+ 变量名 [X];
在创建的时候:X必须是常量,不能是变量(在C99中规定可以是变量);
X的两种表示方法:第一在创建的时候指定数组的大小,第二可以不用指定数组的大小,编译器会根据数组初始化的内容来调节数组的大小。
初始化:
通过监视我们可以观察到arr1数组不初始化的时候,数组中默认放的是随机值,arr2数组我们用0来初始化之后,数组中每个元素都是0。
3.一维数组的使用
数组的使用我们是通过一个操作符"[ ]",下标引用操作符,来访问数组的,数组的每个元素都有对应的下标,数组的下标默认是从0开始的:
#includeint main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int i = 0; for (i = 0; i < 10; i++) { printf("%d ", arr[i]); } return 0; }
解释:通过循环的方式来遍历到数组的每个元素
4.一维数组在内存中的存储
从图中可以看到数组在内存中是连续存放的,因为整形在数组中占4个字节,通过地址可以观察到每次增加4。
5.二维数组的创建初始化和使用
创建:例
int arr[10][10];
和一维数组一样,二维数组创建也是:数据类型+变量名+[ X] [Y];
X:代表行,可以省略。
Y:代表列,不能省略。
初始化和使用:
解释:通过图上可以观察到该数组是一个十行十列的数组,并且用0来初始化,在使用的时候仍然通过“[ ]”下标引用操作符来访问数组中的每个元素。
6.二维数组在内存中的存储
解释:通过图可以观察到,二维数组在内存中的存储其实也是连续存放的。
7.注:
使用数组时的易错点:
数组越界的问题:
解释:创建的数组包含5个元素,但访问的时候访问到第6个元素了,打印出随机值说明访问的时候已经越界了。
解释:和上面相同,数组最多存放5个元素,当存放第6个元素的时候,数组已经越界了。
数组个数的计算:
解释:sizeof计算的是数组的大小,单位是字节;sizeof(arr)计算的是整个数组的大小,sizeof(arr[0])计算的一个元素的大小。
8.一维数组和二维数组的数组名
当我们设计涉及数组的传参,计算数组的大小的时候会经常使用到数组名,但是数组名在不同的情况下所代表的含义有所不同:
1.一维数组数组名:
解释:通过图示可以观察到&arr[0]和arr,的地址相同说明数组名表示首元素的地址。
既然数组名表示首元素的地址,那&数组名又表示什么呢?
解释:看到上图你可能就会认为&数组名也表示首元素的地址,其实不然。
我们继续来看:
解释:00CFF96C—>00CFF970:+1跳过4个字节,说明跳过一个元素;
00CFF96C—>00CFF980:+1跳过20个字节,说明+1跳过整个数组。
总结:数组名表示首元素的地址,&数组名取出的是整个数组的地址。
2.二维数组的数组名
解释: 00C5F824—>00C5F830:+1跳过12个字节,说明跳过3个元素,也就是二维数组的一行,
说明在二维数组中数组名表示首元素的地址,而首元素又是数组的第一行。
00C5F824—>00C5F848:+1跳过36个字节,也就是跳过9个元素,说明在二维数组中&数组名取出的也是整个数组的地址。
3.数组名传参
函数传参:数组名是首元素的地址,即使用int arr[ ]来接受,本质上也是指针int* parr。
9.总结
数组名表示数组首元素的地址。
sizeof(数组名):计算的是整个数组的大小。
&数组名:表示整个数组的地址。
遇见未来最好的方式是创造未来,加油!!!



