今天是跟着b站bit鹏哥学习C语言的第18天,今天的学习内容是数组,包括一维数组和二维数组;
当我们定义一两个数字变量时我们会
int a=0;int b=0;
那当我们定义好多数字时还会傻傻的向上面那样定义一整串的变量吗?那样就会将大量的时间浪费在定义变量上于是就有了”数组“
数组?
定义:用于存储多个相同类型数据的集合;
一:一维数组
1:一维数组的创建
#include <stdio.h> int main () { int a[]; return0 }
向上面那样我们就创建了一个int类型数组名为a的数组;
#include <stdio.h> int main () { char a[]; return 0; }
向上面那样我们就创建了一个char类型数组名为a的数组;
2:一维数组的初始化;
#include <stdio.h> int main() { //int n = 8; //int arr[n] = { 1,2,3,4,5,6,7,8 };这样的写法一般是错误的 []内一般要为常量 int arr[8] = { 1,2,3,4,5,6,7,8 }; // 完全初始化 数组里面有八个元素 int arr[8] = { 1,2,3,4,5 }; //不完全初始化 未初始化的元素为0 char arr1[] = { 'a','b','c','d','\0'}; char arr2[] = "abcd"; //上面两个都是字符数组但是第一个数组在最后一定要加 '\0' //'\0'计算大小时(sizeof)参与计算长度(strlen)是不参与 printf("%s\n", arr1); printf("%s\n", arr2); return 0; }
注意!!!:[ ]中的数组可以省略
3:一维数组的大小
int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; char ch[] = "adcdefghi"; printf("%d \n", sizeof arr); printf("%d \n", sizeof ch); return 0; }
4:数组的访问
int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; for (int i = 0; i < 10; i++) { printf("%d ", arr[i]); } return 0; }
注意!!!:访问数组时下标是从0开始的
5:数组在内存中的存放
int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; for (int i = 0; i < 10; i++) { printf("%d\n",&arr[i]); } return 0; }
此外, 我们也可以用指针来访问数组
int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int* p = arr; for (int i = 0; i < 10; i++) { printf("%d ", *p); p++; } return 0; }
一维数组总结:
1:数组在内存中是连续存放的
2:随着下标的增长,地址是由高到低变化的
二:二维数组
二维数组:是用来描述一个二维表;表四几行几列;
1:二维数组的创建
#include <stdio.h> int main () { int a[2][3]; return 0; }
像这样我们就创建了一个2行3列的二维数组;
2:二维数组的初始化
int main() { int arr[2][3] = { 1,2,3,4, }; int arr3[2][3] = { {1,2} ,{4,5} }; //不完全初始化 后面补0 int arr1[2][3] = { 1,2,3,4,5,6 }; int arr2[2][3] = { {1,2,3},{4,5,6} }; //完全初始化 return 0; }
注意!!!:二维数组中只有第二个[ ]的数组可以省略
3:二维数组的访问
int main() { int arr[2][3] = { 1,2,3,4, }; int arr3[2][3] = { {1,2} ,{4,5} }; //不完全初始化 后面补0 int arr1[2][3] = { 1,2,3,4,5,6 }; int arr2[2][3] = { {1,2,3},{4,5,6} }; //完全初始化 for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { printf("%d ", arr1[i][j]); } } return 0; }
4:二维数组在内存中的存放
int main() { int arr[2][3] = { 1,2,3,4, }; int arr3[2][3] = { {1,2} ,{4,5} }; //不完全初始化 后面补0 int arr1[2][3] = { 1,2,3,4,5,6 }; int arr2[2][3] = { {1,2,3},{4,5,6} }; //完全初始化 for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) printf("%p\n", &arr1[i][j]); }
二维数组总结:
1:二维数组在内存中也是连续存放的!
2:一行内部连续,跨行也是连续的!
注意!!!:数组名就是数组的首元素地址
两个例外:
1:sizeof(数组名)--此时表示整个数组--计算的是整个数组的大小
2:&(数组名)取出的是整个数组的地址