一维数组、二维数组学习内容

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 <stdio.h>

int main()
{
   
	char arr[]="abcde";
	int sz=sizeof(arr)/sizeof(arr[0]);//求数组的大小
	int i=0;
	for(;i<sz;i++)
		printf("%c ",arr[i]);
   return 0;
}

 4.一维数组在内存中的放置

取地址用%p

#include <stdio.h>

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<sz;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 <stdio.h>

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 <stdio.h>

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,所以可以得出结论是二维数组的存储是连续的,本质上是一维的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值