1.数组创建
用:类型名 __数组名称__[ 常量表达式 ] ;
其中常量表达式表示元素个数(数组长度),下标从0开始。
例如:int arr[10]; //创建一个数组,存放整型元素,放10个元素
char arr[5]; //创建一个数组,存放字符型,存五个字符
常量表达式不能用“变量替换并给变量赋值”的方法,即:
int num=10; int arr[num]; 这种是错误的!
2.数组初始化
int arr[10]={1,2,3}; //不完全初始化,存放了123三个整型数字,数组长度为10,其余默认为0
char arr1 [5]={'a','b','c','d','e'}; //存放了五个字符,98—‘b’,里面如果写{‘a’,98}等同于{‘a’,‘b’}
char arr2 [5]="abc" ; //存放的是a、b、c、\0 四个字符
也可以不指定数组大小,由给出的元素个数确定数组长度
例如:int arr[] = {1,2,3,4,5} ; //5个元素
char arr3 [] = "abcd" ; //5个元素:a、b、c、d、\0
sizeof和strlen:
printf("%d",sizeof(arr3)); 求出为5,计算arr(变量、数组、类型)所占空间的大小,字符包括\0,使用时不用引用头文件,只是个操作
printf("%d", strlen(arr3)) ;求出为4,strlen只计算字符串的长度,到\0停止,使用时需要引用头文件
3.数组访问
用到数组访问的操作符——下标引用操作符:[ ],用来找数组的下标,下标从0开始
- #include
-
- int main()
- {
-
- char arr[]="abcde";
- int sz=sizeof(arr)/sizeof(arr[0]);//求数组的大小
- int i=0;
- for(;i
- printf("%c ",arr[i]);
- return 0;
- }
4.一维数组在内存中的放置
取地址用%p
- #include
-
- int main()
- {
-
- int arr[]={1,2,3,4,5,6,7,8,9};
- int sz=sizeof(arr)/sizeof(arr[0]);
- int i=0;
- for(;i
- {
- printf("arr[%d]=%p\n ",i,&arr[i]);//取数组的地址%p并打印,看存储在哪里
- }
- return 0;
- }
得到的结果为:
arr[0]=0x7ffd0d8adee0
arr[1]=0x7ffd0d8adee4
arr[2]=0x7ffd0d8adee8
arr[3]=0x7ffd0d8adeec
arr[4]=0x7ffd0d8adef0
arr[5]=0x7ffd0d8adef4
arr[6]=0x7ffd0d8adef8
arr[7]=0x7ffd0d8adefc
arr[8]=0x7ffd0d8adf00
看出,一维数组在内存中是连续存放,每次间隔4,即4个字节一个数字
5.二维数组创建和初始化
创建:创建和一维数组相似,需要:类型、数组名和数组长度,但是数组长度是二维:行列都有
例如: int arr [3][4] ; //三行四列的二维数组
初始化:int arr [3] [4] ={1,2,3,4,5} ; //依次填充第一行向第二行继续填充,不完全初始化,其余为0
int arr [3][4]={{1,2,3},{4,5}} ;//这种用每行作为一个一维数组表示,该数组表示两行,不完全初始化
初始化时不能省略列的个数,可以省略行的个数,int arr [ ][2]={{1,2},{3,4}} ;
使用:用下标访问,从0开始
- #include
-
- int main()
- {
-
- int arr[3][4]={{1,2,3},{4,5}};
- int i=0;//行
- for(;i<3;i++)
- {
-
- int j=0;//列
- for(;j<4;j++)
- printf("%d ",arr[i][j]);
- printf("\n");
- }
-
- return 0;
- }
结果为:
1 2 3 0
4 5 0 0
0 0 0 0
在内存中的存储:
- #include
-
- int main()
- {
-
- int arr[3][4]={{1,2,3},{4,5}};
- int i=0;//行
- for(;i<3;i++)
- {
-
- int j=0;//列
- for(;j<4;j++)
- printf("arr[%d] [%d]=%p\n",i,j,&arr[i][j]);
- }
-
- return 0;
- }
结果为:
arr[0] [0]=0x7ffcca237b60
arr[0] [1]=0x7ffcca237b64
arr[0] [2]=0x7ffcca237b68
arr[0] [3]=0x7ffcca237b6c
arr[1] [0]=0x7ffcca237b70
arr[1] [1]=0x7ffcca237b74
arr[1] [2]=0x7ffcca237b78
arr[1] [3]=0x7ffcca237b7c
arr[2] [0]=0x7ffcca237b80
arr[2] [1]=0x7ffcca237b84
arr[2] [2]=0x7ffcca237b88
arr[2] [3]=0x7ffcca237b8c
发现每个元素之间相差还是4,且第二行第一个元素和第一行第四个元素间相差也是4,所以可以得出结论是二维数组的存储是连续的,本质上是一维的
-
相关阅读:
3.2 Redis的持久化机制-RDB
OpenCV4(C++)—— 图像连通域的详细分析
mysql的分组group by
STL--List--与正反向迭代器复写
c++ 要求用户输入整数时的风险
如何通过日志恢复被删除的数据
『递归』整数划分
STK12与Python联合仿真(一):环境搭建
DOSBox设置段并执行代码-例2
力扣刷题 day49:10-19
-
原文地址:https://blog.csdn.net/GBQ1224/article/details/126289063