S4——数组 上

简介: S4——数组

1.  一维数组的创建

1.1  数组的创建

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

数组的创建方式

type_t    arr_name[const_n];

//type_t:是指数组的元素类型(可以是基本数据类型的任意一种)

//arr_name:数组名(与变量相同,遵循标识符的命名规则)

//const_n:常量表达式(用来表示数组中元素个数,即数组的大小(长度))

注:常量表达式是用[]方括号括起来的,不是()圆括号。

数组创建的实例


代码1:

int  arr1[10];//定义一个有10个整形的一维数组
char  arr2[5];
float  arr3[6];
...


代码2:

int  n=10;
int  arr[n];//这样可以吗?

注:变长数组(不定长的数组)

数组创建,在C99标准之前,[]中要给一个常量才可以,不能使用变量。在C99标准支持了变长数组的概念,数组的大小可以使用变量指定,但是数组不能初始化。

理解:

①能否用变长数组:先看环境支不支持C99的新特性

   如:VS   IDE   不支持C99中的变长数组

          Linux  gcc   支持C99中的变长数组

②注意:变长数组不能初始化

1.2  数组的初始化

数组的初始化是指,在创建数组的同时给数组的内容一些(合理)初始值。

即:创建的同时给数组一些值,这就叫初始化(类似变量)

一维数组初始化的一般形式如下

1、完全初始化:(元素个数=数组长度)

①指定数组长度:

int   arr1[6]={0,1,2,3,4,5};//元素个数=数组长度

②不指定数组长度:(没有指定数组长度,编译会根据初始化的内容来确定数组长度)

int   arr2[]={0,1,2,3,4};//数组长度=5

2、不完全初始化:(数组长度!=元素个数)

如:

   ①int型:剩余没赋初值的元素默认初始化为0

   ②char型:剩余的元素默认初始化为‘\0’

注:数组元素之间用,逗号隔开。

注意区分以下代码:

代码1:

#include<stdio.h>
int main()
{
  char arr1[] = { 'a','b','c'};
  char arr2[] = "abc";
  printf("%s\n", arr1);
  printf("%s\n", arr2);
  return 0;
}

运行结果:

%s——打印字符串,直到遇到‘\0’才停止。

每一个字符串末尾隐藏放了个'\0'。


代码2:


#include<stdio.h>
int main()
{
  char arr1[4] = { 'a','b','c' };
  char arr2[] = { 'a','b','c' };
  printf("%s\n", arr1);
  printf("%s\n", arr1);
  return 0;
}

运行结果:

注:char未初始化的元素默认'\0'

1.3  一维数组的使用

知识点:


1、数组是使用下标来访问的,下标是从0开始的(下标标明了元素在数组中的位置)

2、[]在这是下标访问操作符(所以里面可以是变量)

3、数组的大小可以通过计算得到


如:

       int arr[10];

       sz=sizeof(arr)/sizeof(arr[0]);


代码实例如下:

#include<stdio.h>
int main()
{
  int arr[] = { 0,1,2,3,4,5 };
  int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数
  //1、顺序打印
  int i = 0;//下标
  for (i = 0; i < sz; i++)
  {
    printf("%d ", arr[i]);
  }
  printf("\n");
  //逆序打印
  for (i = sz - 1; i >= 0; i--)
  {
    printf("%d ", arr[i]);
  }
  printf("\n");
  return 0;
}

运行结果:


说明:

数组的使用与变量相似,但也有区别!

1、数组必须先定义,后使用。

2、数组元素只能逐个引用,而不能一次引用整个数组(字符串除外)。

3、 当逐个使用数组中的每一个元素时,通常借助for循环语句。

1.4  一维数组在内存中的存储

探讨数组在内存中的存储:我们打印每个元素的地址看看

#include<stdio.h>
int main()
{
  int arr[6] = { 0,1,2,3,4,5 };
  //打印每一个元素的地址
  int i = 0;
  for (i = 0; i < 6; i++)
  {
    printf("%p\n", &arr[i]);//%p-专门用来打印地址的
  }
  return 0;
}

运行结果:

由于数组在内存连续存放,所以我们知道数组的一个地址就可以顺藤摸瓜找到其他元素。

代码如下:

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

运行结果:


2.  二维数组的创建和初始化

2.1  二维数组的创建

//二维数组创建

int  arr[3][4];//定义一个3行4列的整形数组

char  arr1[2][3];

说明:

①二维数组可以看成一个矩阵(先行后列)

②元素个数=行数*列数

③存储一个二维数组所需的内存字节数:

                                总字节数=sizeof(类型)*行数*列数



2.2  二维数组的初始化

1、按数组的排列顺序对各数组元素赋初值:

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

2、分行给二维数组赋初值(一个花括号{}表示一行)

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

3、注意:二维数组如果初始化,行是可以省略的,但列不能省略!

      int  arr3[][2]={1,2,3,4,5,6};//元素个数=行数*列数—》行数=3


相关文章
测试方案有点难?ChatGPT助你轻松编写测试方案!
使用ChatGPT辅助编写测试方案,以高级搜索功能为例,涉及关键词搜索、过滤条件、界面兼容性、错误处理等测试点。首先明确测试需求,如按作者、时间范围和分类搜索,产品形态为App和Web应用。然后,通过提示词逐步细化方案,包括App的移动设备适配、耗电量和内存占用测试。通过不断优化提示词,确保测试方案全面覆盖功能性能、用户体验及专项测试内容。
|
关系型数据库 Java 数据库连接
MyBatis-Plus高级用法
【1月更文挑战第5天】MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
221 2
|
存储 机器学习/深度学习 人工智能
机器学习 | NumPy超详细教程
机器学习 | NumPy超详细教程
434 0
|
10月前
什么是 NAT?
NAT 是网络地址转换。这是一种协议,为公共网络上的多台计算机提供一种方式来共享到 Internet 的单一连接。
|
11月前
|
物联网
物联网:NB卡是否支持2/3/4G网络
在讨论“NB卡是否支持2/3/4G网络”的问题时,我们首先需要明确“NB卡”指的是什么。在通信领域中,“NB卡”通常指的是支持NB-IoT(Narrowband Internet of Things,窄带物联网)技术的SIM卡或模块。NB-IoT是一种专为物联网设计的窄带无线通信技术,它基于现有的蜂窝网络进行构建,但专注于低功耗广域网(LPWAN)应用。
|
消息中间件 Java API
解析Java微服务架构:从零构建高性能系统
解析Java微服务架构:从零构建高性能系统
|
10月前
|
Kubernetes Docker 容器
掌握Docker容器化技术:从入门到实战
掌握Docker容器化技术:从入门到实战
160 0
|
10月前
|
开发框架 前端开发 JavaScript
常见的跨平台开发框架
【10月更文挑战第25天】这些跨平台开发框架各有特点,开发者可以根据项目的具体需求、团队的技术栈和对性能、用户体验的要求等因素来选择合适的框架进行开发。
|
JavaScript
vue 滑动拼图验证
vue 滑动拼图验证
219 1
vue 滑动拼图验证
|
11月前
|
前端开发 JavaScript 安全
前端JS实现密码校验键盘横竖、26字母、相同字母、相同数字、密码包含用户名、数字 字母不能连续 不能相同三个、不能横向 竖向 连续三个 包含字符、不能有中文符号
该 JavaScript 代码实现了一个严格的密码校验功能,确保密码满足多种安全要求,包括长度、字符类型、不包含中文及特殊字符、不与用户名相似等。通过多个辅助函数,如 `validateFormat` 检查密码格式,`isHasChinaCharFun` 检测中文符号,`getCharAll` 生成键盘组合,以及 `checkPasswordFun` 综合验证密码的有效性和安全性。此工具对于提高用户账户的安全性非常有用。
457 0