C语言-数组

一、一维数组

1 定义

具有一定顺序的若干变量的集合

2 格式

存储类型 数据类型 数组名[元素个数]       例如·int arr[5];

  • 访问时,下标从 0开始 a[0]表示第一个数据
  • 访问数组元素:数组名[下标]; 下标从0开始,到元素个数-1
  • 只有定义时 a[5]代表数组,其他时间 a[i]代表第 i+1个元素

  • 数组名:代表数组的首地址,是一个地址常量,不能被赋值,也不能为(左值)

3 特点

数据类型相同;内存连续

 比如下面的例子,数组a[5] 的内存是连续的,因为数组元素为int类型,所以每个元素之间地址相差4个字节。

注意

(1)数组的数据类型就是数组元素的数据类型

(2)数组名要符合标识符的命名规则

(3)数组下标范围:0 ~ n-1

(4)在同一个函数中,数组名不能与其他变量名相同

注意数组越界问题 :用到的数组数据不能超出定义的数组范围

  4. 数组大小

① sizeof(数组名)

数据元素的个数*数据类型的大小 开辟的数组空间大小

利用sizeof(a)查询数组大小,得到的数值就是数组空间大小,也就是数据元素的个数*数据类型的大小 也就是 5*4 = 20,

5. 初始化

  • 完全初始化 为每一个元素都赋一个初值 ;
  • 部分初始化  只为数组中部分元素赋初值,未初始化部分值为 0
  • 未初始化  数组中的元素都不赋值,所有值为随机值

 

6. 定义空数组

  • int a[5]={0};
  • int a[5]={ };

7. 引用

(1)必须先定义后引用

(2)每次只能引用一个数据元素 a[i],不能整体引用

(3)注意数组越界问题

8. 循环遍历 

  • 将数组下标作为循环变量进行循环

9. 清零函数

9.1 bzero

#include <strings.h> 头文件

void bzero(void *s, size_t n);

( 首地址 , 清除的空间大小)

功能:清空数组

参数:数组首地址,

返回值:

 9.2 memset

#include <string.h>

void *memset(void *s, int c, size_t n);

功能:清空数组

参数:数组首地址, c 替换的数据, n:清空的字节大小

返回值:数组首地址

 

 二、字符数组

2.1 概念

  • 字符数组存放字符串
  • 字符串结束标志'\0', \0可不写,但是默认存在,占一个位置

2.2 格式 

四种格式:

char a[6] = {"hello"}; 

char b[6] = "hello";

char c[] = "hello";

char d[33] = "hello";

char a1[] = {'a','b','c'}; // 数据类型是字符型,sizeof(a1)==3

char a2[] = {"abc"}; // 数据类型是字符串,sizeof(a2)==4 必须算上'\0

 2.3输入输出

2.3.1 for 循环遍历输出

char a[6] = {"hello"};

for(int i = 0; i < 6; i++)

printf("%d ", a[i]);

2.3.2 字符串输出

char a[] = {"hello world"};

printf("%s\n", a);

%s 字符串输出格式

scanf 遇到空格或回车时会认为输入结束

如果想支持空格的写法,可以用:scanf("%[^\n]",a);

 

2.3.3  gets  puts

输入: char *gets(char *s);

输出: int puts(const char *s);

 2.4 计算字符串实际元素个数

2.4.1 遍历判断

 2.4.2 strlen 函数

#include <string.h>

size_t strlen(const char *s); 

功能:计算字符串实际元素个数 不包括 '\0'

参数:字符串首地址

返回值:实际元素个数

sizeof 和 strlen的区别:

1. sizeof 是关键字,strlen 是函数

2. sizeof 计算开辟的空间大小,strlen 计算字符串实际元素个数

3. sizeof 计算包括 '\0', strlen不包括,char a[] = "hello";

三、二维数组

 3.1 基本结构

格式:存储类型 数据类型 数组名[行数][列数]

int a[2][3];

访问数组元素:数组名[行下标][列下标]

下标的范围:0~行数-1,0~列数-1,注意不要数组越界

3.2 初始化

完全初始化

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

int a[2][3] = {{1,2,3},{4,5,6}};  内部的大括号内表示单行内赋值

部分初始化·

int a[2][3]={1,2,3};

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

初始化时

可以省略行数,但是不能省略列数

未初始化时 值为随机值,需要单独赋值

3.3 大小

行数*列数=元素个数

行数*列数*sizeof(数据类型)=空间大小

 3.4 数组名

数组名也是二维数组首行地址

  • a:表示第一行的首地址
  • a+1:是第二行的首地址

 

 3.5 循环遍历

for循环嵌套,先行后列

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值