浅浅理解C语言之数组大佬

目录

一、数组概念

二、一维数组

1.创建和初始化

2.数组的类型 

3.数组的使用技巧

4.数组在内存中的储存(打印数组元素的地址)

由输出结果可知,数组随着下标的增⻓,地址是由⼩到⼤变化的,并且我们发现每两个相邻的元素之间相差4(因为⼀个整型是4个字节)。所以我们得出结论:数组在内存中是连续存放的

三、二维数组

1.创建

2.初始化

a.完全初始化

b.不完全初始化

3.二维数组的下标

4.二维数组在内存的储存

​编辑结论:二维数组在内存的空间布局上,也是线性连续且递增的!!!          二维数组本质上也是一维数组,只不过内部元素放的是一维数组。

四、最后

求赞!!!!


一、数组概念

数组是一组相同类型元素的组合

1.相同类型:数组中的多个数据类型相同

2.集合:数组中存放1个或多个数据,元素个数不能为0

3.数组分为一维数组和多维数组(这里只介绍二维数组)

二、一维数组

1.创建和初始化

创建:

类型 数组名[常量值(数组大小)];

   int     arr        [10];

初始化:a:不完全初始化(创建的数组规定了大小,也就是确定了数组中只能放的元素个数,但只给几个元素赋了值,没有管剩下的元素;

创建的数组没有规定大小,但系统会根据你输入的元素去开辟相应的空间大小)

               b:完全初始化

//不完全初始化
int arr[10]={1,2,3};
char arr[5]={'a','b'};

int arr[]={0};
char arr[4]="abcd";

//完全初始化
int arr[10]={1,2,3,4,5,6,7,8,9,10};
char arr[5]={'a','b','c','d','e'};

2.数组的类型 

数组算是一种自定义类型,去掉数组名就是数组类型。

3.数组的使用技巧

首先由以上知识可知如何定义一个数组,那么在敲代码过程中,我们灵活应用数组技巧,可以使代码更加简练,其中理解数组的下标,计算数组大小等等就是十分有趣的知识点。

数组下标:数组是使用下标来访问的,下标是从0开始访问

int main(){
int arr[5]={1,2,3,4,5};
printf("%d",arr[0]);//打印数组第一个元素
return 0;
}

数组大小:计算数组大小需要sizeof,strlen(需要引用头文件)函数

两者除计算字符串大小时有区别之外,其余情况都一样。

区别:sizeof计算字符串函数时,会多计算一个字符'\0','\0'是字符串的结束标准,每一个字符串都会有,只是不显示出来。

           strlen只会计算'\0'之前的字符串的字符个数,strlen遇到'\0'才会停止计算,否则会一直找下去,直到遇上'\0'字符,从而产生随机值。

           总结:sizeof的值永远要比strlen计算的值多1(只限于字符串数组!!!)   对于其他类型两者的值都一样。

#include<stdio.h>
#include<stdring>
int main()
{
char arr="abcdef";
printf("%d\n",sizeof(arr));
printf(%d\n",strlen(arr));
return 0;
}


          sizeof()操作符用于取长度,以字节为单位。sizeof(数组名)即求的是整个数组的大小sizeof(首元素)即求数组单个元素大小arr[0]。

数组的大小=sizeof(arr)/sizeof(arr[0])

4.数组在内存中的储存(打印数组元素的地址)

#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int i = 0;
for(i=0; i<10; i++)
{
printf("&arr[%d] = %p\n ", i, &arr[i]);
}
return 0;
}

由输出结果可知,数组随着下标的增⻓,地址是由⼩到⼤变化的,并且我们发现每两个相邻的
元素之间相差4(因为⼀个整型是4个字节)。所以我们得出结论:数组在内存中是连续存放的

三、二维数组

1.创建

数组类型  数组[常量值][常量值]

         int     arr  [3]           [5];

[3]:表示数组有三行

[5]:表示每一行有5个元素

2.初始化

a.完全初始化

int arr[3][5]={1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};

b.不完全初始化

int arr[3][5]={1,2,3};
int arr[3][4] = {{1,2},{4,5}};
int arr[][4] = {{2,3},{4,5}};

未初始化的部分默认为0。

3.二维数组的下标

#include <stdio.h>
int main()
{
	int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };
	printf("%d\n", arr[2][4]);
	return 0;
}

4.二维数组在内存的储存

#include <stdio.h>
int main()
{
	int arr[3][4];
	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;
}
结论:二维数组在内存的空间布局上,也是线性连续且递增的!!!
          二维数组本质上也是一维数组,只不过内部元素放的是一维数组。

四、最后

小白浅浅复习一下数组,如有错误,求评论或私信指正。

请看官欣赏上次博客:http://t.csdnimg.cn/ObfEE

求赞!!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值