C语言之数组

C语言之数组

数组

数组的概述

数组是由若干个相同类型的变量在内存中有序存储的集合

一维数组名是数组的首元素地址&a[0]

数组的定义

1.一维数组的定义

格式: 数组类型 数组名 [数组的元素的个数]

int a[10];
char b[5];
int a[] = {1,2,3};
2.二维数组的定义

格式:数组类型 数组名 【行的个数】【列的个数】

int a[2][3];

注意:在数组定义的时候,可以不给出行数,但是必须要给出列数,二维数组的大小由初始化行数来决定。

int a[][3]={1,2,3}; // 1行
int a[][3]={1,2,3,4}; // 2行
3.多维数组的定义

依次类推

数组的分类

1.按元素类型来分
char a[5]; // 字符数组
short a[5]; // 短整型数组
int a[5]; // 整形数组
long a[5]; // 长整型数组
float a[5]; // 浮点型数组
char* a[5]; // 指针数组
struct stu a[5]; //结构体数组
2.按维度分

从存储空间上来说,并无多维一说,统统都是一维。
请添加图片描述

2.1一维数组

int a[5] 类似于地里有一排萝卜坑,一个坑一个萝卜

2.2二维数组

int a[2][5] 类似与地里有两个大坑,一个大坑5个小坑,一个小坑一个萝卜

2.3三维数组

依次类推…

定义一个数组的时候,顺便给数组赋初值,及在开辟空间的时候同时赋值

数组的初始化

一维数组的初始化

1.全部初始化

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

2.部分初始化

int a[5] = {1,2,3}; 赋值不足会自动补零。

二维数组初始化

1.全部初始化

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

2.部分初始化

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

赋值不足会自动补零。

数组的引用

一维数组的引用

数组名【下标】

int a[5];
a[0]   , a[1]  ...   a[5]
二维数组的引用

数组名【行下标】【列下标】

int a[2][2];
a[0][0] , a[0][1] , a[1][0] , a[1][1]
字符数组的引用
char c1[] = {'h',' ','e','l','l','0'}; // 6字节
char c2[] = "h ello"; // 7字节
char a[][5]={
    {'a','b','c','d','e'},
    {'a','b','c','d','e'}
};
char a[][6]={"hello","world"};

1.用字符串方式赋值并用字符赋值的数组多占一个字节,用字符串方式赋值会多一个字符串结尾符’/0’

2.字符串方式的输入输出更方便一些。

//把前面50个元素初始化为100,后面50个元素赋值为200.
int a[100] = {[0 ... 49]=100,[50 ... 99]=200};

注意事项:

段错误:犹豫程序员在代码中访问了非法地址导致的。(指针没有初始化(野指针)、数组越界、指针乱指)

存储-》数组在计算机中连续挨个存储的

大小:

  1. sizeof(); 求任意类型数据的大小

  2. strlen(); 专门算字符串实际长度,不会算’\0’

    include <string.h>  
    size_t strlen(const char *s);
    size_t ----> unsigned int
    

空字符串、‘A’、"A"区别

  1. char buf[5] = “”;空字符串
  2. ‘A’ ------> 字符’A’ 单个字符
  3. “A” -----> 字符串 ‘A’‘\0’
清空数组

数组不清空,里面会是随机值。

1.bzero
#include <strings.h>
void bzero(void *s, size_t n);
参数1:s-->数组名
参数2:n-->数组的大小
    例:int a[5];
    bzero(a,sizeof(a));
2.memset
#include <string.h>
void *memset(void *s, int c, size_t n);
参数1:s-->数组名
参数2:c-->自定义初始值
参数3:n-->数组的大小
数组的怪异写法(了解)
int buf[10];
buf[0]=10; ---->等价于0[buf]=10;
int a[3][4]={12,13,{14},15,16,17}// 错误的,不满足从左往右练习分组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

繁星北斗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值