C语言——数组

来详细的讲解数组问题


一、数组的创建与初始化

使用数组时最好初始化,不然遇到特定问题编译器会出错

先来了解简单数组的组成。
一个数组是由数组类型数组名数组大小组成。

1.初识数组

//初识数组
int arr[10];//int 数组类型 arr数组名 [10]数组大小
int arr[10]={0};	//数组初始化是={0}

2.数组初始化

我现在知道的有两种数组初始化的方法。

int arr[10];		//第一种适合指定的数组大小使用
int arr[];			//第二种适合没有指定的大小使用

在补充说明一下char类型里的字符是根据ASCII码值赋值

//在ASCII码值里98是b
char arr2[3] = {'a',98, 'c'};		//对ASCII码值了解可以直接用ASCII码值代替数

一、一维数组与二维数组的使用与区别

二、一维数组

1.一维数组的创建

补充知识点:数组的存储是连续的由低到高
在这里插入图片描述

int arr[10]={1,2,3,4,5,6,7,8,9,10};		//这是一维数组,在描述一行元素中使用

2.一维数组的具体使用方法

#include <stdio.h>
int main()
{
 int arr[10] = {0};//数组的不完全初始化
    //计算数组的元素个数
    int sz = sizeof(arr)/sizeof(arr[0]);
 //对数组内容赋值,数组是使用下标来访问的,下标从0开始。
 int i = 0;//做下标
 for(i=0; i<10; i++)
 {
 arr[i] = i;
 }
 //输出数组的内容
 for(i=0; i<10; ++i)
 {
 printf("%d ", arr[i]);
 }
 return 0;
}

二、二维数组

1、二维数组的创建

二数组的创建有两种方法

//数组创建
//方法一
int arr[4][5];
char arr[3][5];
double arr[4][4];

//方法二,可省略二维数组的行,不能省略数组列
int arr[][4];
char arr[][3];
double arr[][5];

说明:因为数组是连续存放的,在把一行数组存放完后,然后会到下一列下一行。要是省略了列在存放完第一行最后一个元素后,就会不知道下一列有多少列,元素就不知道该放在那里,之后就会报错。

2、二维数组的使用

#include <stdio.h>
//二数组的赋值方法有两种
int arr[4][5]={{1,2,3,4}{2,3,4,5}{3,4,5,6},{4,5,6,7}};	//数组没放满后面会默认补0

int arr2[4][5]={1,2,3,4,5,6,7,8};			//根据数组是连续存放的原理,等一行放完之后会自动放到第二列

二维数组的具体使用

int main()
{
 	int arr[3][4] = {0};
 	int i = 0;
 	for(i=0; i<3; i++)			//行遍历
 	{
 	
 		int j=0;
 		
 		for(j=0; j<4; j++)		//列遍历
 		{
 		
 			arr[i][j] = i*4+j;
 		
 		}
 	}
 	//输出
 		for(i=0; i<3; i++)
	 	{
	 	
 			int j = 0;
 			
 			for(j=0; j<4; j++)
	 			{
	 			
	 			printf("%d ", arr[i][j]);
	 			
 				}
 }
 	return 0;
}
 

三、数组的越界

数组的下标是有范围限制的。 数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。
所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。
C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就 是正确的,
所以程序员写代码时,最好自己做越界的检查

说明:超过了数组下标输出的会是随机值

四、数组补充知识

数组名就是数值元素首地址

void a(int arr)
{

}
int main()
{

int arr[10]={1,2,3,4,5,6,7,8,9}
a(arr);		//a是函数,传给a函数的是arr数组的元素首地址
//有两种例外
//第一种在sizeof内部的是整个数组的大小
sizeof(arr)
//第二种
&arr	//&是整个数组的地址
}


总结

数组名就是数组首元素地址,在sizeof()内部是整个数组大小,在补充一点sizeof是操作符不是函数

有写的不好的地方还请大佬指正。

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YC@_@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值