目录

一、一维数组的创建和初始化

1.1数组的创建

1.2数组的初始化

数组字符串的创建

strlen和sizeof的区别

1.3一维数组的使用

计算数组元素的个数

用指针访问数组(代替下标引用操作符)

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

二、二维数组的创建和初始化

2.1二维数组的创建

2.2二维数组的初始化

2.3二维数组的遍历

三、数组作为函数参数(数组传参)

四、数组名


一、一维数组的创建和初始化

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

1.1数组的创建

数组的创建方式:

type_t arr_name [const_n];
//type_t是指数组的元素类型
//const_n是一个常量表达式,用来指定数组的大小

实例:

//代码1
int arr1[10];//代码2
int count = 10;
int arr2[count];    //在C99标准之前,[]只允许常量,不能使用变量创建//代码3
char arr3[10];
float arr4[1];
double arr5[20];

1.2数组的初始化

创建的同时给一些初始值叫做初始化

int arr[10] = {1,2,3,4,5,6,7,8,9,10};    //完全初始化
int arr[10] = {1,2,3}    //不完全初始化,剩余的元素默认初始化为0

数组字符串的创建

char arr1[] = {'a','b','c'};
//arr1有3个元素,数组的大小是3个字节
char arr2[] = "abc"
//arr2有4个元素,数组的大小是4个字节('/0')

strlen和sizeof的区别

strlen是一个库函数,计算的是字符串的长度,并且只能针对字符串,关注的是字符串是否有'/0',计算'/0'之前的字符个数。

sizeof是一个操作符(运算符),用来计算变量所占内存空间大小的,任何类型都可以使用,只关注空间大小。

1.3一维数组的使用

数组是使用下标来访问的,下标从0开始,[ ] 是下标引用操作符。

计算数组元素的个数

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

用指针访问数组(代替下标引用操作符)

int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int* p = &arr[0];
//打印数组每个元素的地址
int i = 0;
for (i = 0; i < 10; i++)
{printf("%p-----%p ", p + i, &arr[i]);printf("%d\n", *(p + i));
}

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

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]);
}

可以看出:

  1. 一维数组在内存中是连续存放的
  2. 数组随着下标的增长,地址由低到高变化

二、二维数组的创建和初始化

2.1二维数组的创建

int arr[3][4];    //创建三行四列的数组
char arr[3][5];    //创建三行五列的数组

2.2二维数组的初始化

二维数组的初始化优先按行填满

初始化时必须至少指定列数,如 int arr[ ][4];

int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};    //完全初始化
int arr[3][4] = {1,2,3,4,5,6,7};    //不完全初始化。优先填充行
int arr[3][4] = {{1,2},{3,4},{5,6}};    //每行不完全初始化

2.3二维数组的遍历

int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
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]);}printf("\n");
}

根据运行结果可以看出,二维数组在内存中连续存放

三、数组作为函数参数(数组传参)

数组在传参时,本质是传的数组第一个元素的地址。

int arr[] =  {1,5,5,6,7,9,0,6};

//设计一个函数对arr数组进行排序

冒泡排序法:

//冒泡排序法
void bubble_sort(int arr[], int sz)    //void bubble_sort(int* arr, int sz)
{int i = 0;for (i = 0; i < sz - 1; i++){//一趟冒泡排序int j = 0;for (j = 0; j < sz-1-i  ; j++){if (arr[j] > arr[j + 1]){//交换int tmp = arr[j];arr[j] = arr[j+1];arr[j+1] = tmp;}}}
}int main()
{int arr[] =  {1,5,5,6,7,9,0,6};int sz = sizeof(arr) / sizeof(arr[0]);    //确定趟数(n-1)bubble_sort(arr, sz);    //调用冒泡排序函数int i = 0;for (i = 0; i <sizeof(arr) / sizeof(arr[0]); i++){printf("%d ",arr[i]);}return 0;
}

四、数组名

所有的数组名都表示数组首元素的地址

int main()
{int arr[10] = { 1,2,3,4,5 };printf("%p\n", arr);        //arr是数组首元素的地址printf("%p\n", &arr[0]);    //&arr[0]是数组首元素的地址printf("%d\n", *arr);    //是首元素的值printf("%p\n", &arr);    //是整个数组的地址//输出结果return 0;
}

但有以下两种特殊情况:

  1. sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数 组。
  2. &数组名,数组名表示整个数组,取出的是数组的地址。

【C语言精讲】——创建数组、使用数组(一维数组、二维数组)相关推荐

  1. 第二十一节(数组概要, 一维、二维数组的声明和使用,数组的排序,数组的查找,)...

    一维数组:1:/*数组:1. 数组是一种引用类型2. 数组是一种简单的数据结构,线性的机构3. 数组是一个容器,可以用来存储其他元素,4. 数组也是可以存储任意数据类型的元素5. 数组分为:一维数组, ...

  2. C语言求二维数组平均数,一道JavaScript的二维数组求平均数的题

    JavaScript中只支持一维数组,但是可以在数组中嵌套数组来创建二维以至于多维的数组.今天下午在看书时候,发现一道感觉比较有意思的题,就是js中如何求二维数组的列之和和行之和,现在就给大家分享下, ...

  3. c 语言 二维数组地址,C/C++ 关于一维或二维数组首地址表示含义

    C/C++ 关于一维或二维数组首地址表示含义 发布时间:2020-06-26 10:35:21 来源:51CTO 阅读:210 作者:sonissa 这是一个经常会忘却的知识点,最近也一直在吃这方面的 ...

  4. C语言基础入门48篇_30_二维数组的定义与使用(二维数组的定义:type 数组名[行][列]、二维数组的初始化、二维数组的引用)

    1. 二维数组的定义 type 数组名[行][列] 2. 二维数组的初始化 2.1 全部初始化为0 char chAry[2][3] = { 0 }; 实例: #include <stdio.h ...

  5. python 二维数组心得_基于python 二维数组及画图的实例详解

    python中如何使用二维数组 在Python中,一个像这样的多维表格可以通过"序列的序列"实现.一个表格是行的序列.每一行又是独立单元格的序列.这类似于小编们使用的数学记号,在数 ...

  6. 【java进阶06:数组】使用一维数组模拟栈数据结构 使用二维数组模拟酒店,酒店管理系统 Arrays工具类 冒泡排序算法、选择排序算法、二分法

    目录 数组 二维数组 总结 作业 Arrays工具类 数组 数组总结 及 静态初始化一维数组 /* Array:1.java语言中的数组是一种引用数据类型,不属于基本数据类型,数组的父类是Object ...

  7. php 二维数组中去重,PHP实现二维数组去重功能示例

    PHP实现二维数组去重功能示例 发布于 2017-08-07 21:05:17 | 68 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Prep ...

  8. 二维数组和指针(包含交换二维数组行列)

    有必要对a[i]的性质作进一步说明.a[i]从形式上看是a数组中的第i个元素.如果a是一维数组名,则a[i]代表a数组第i个元素所占的内存单元的内容.a[i]是有物理地址的,是占内存单元的.但如果a是 ...

  9. 【Day4】ES5(循环别名 ,数组,数组遍历,数组排序,二维数组)

    日期:2月3日 1. 循环的别名 别名: for () { } 别名: while() { } break   结束掉离他最近的循环 break 别名: 结束掉指定的循环 2. 循环的别名的使用场景 ...

  10. php某列为键数组为值,PHP 将二维数组中某列值作为数组的键名 -- 超实用

    有时候,想通过数组的中某字段值, 然后再在二维数组中获取存在该字段值的数组: 一般能想到的就是foreach 遍历比较一下跟该字段值一样,就获取到想要的数组,如下: //测试二维数组 $arr =ar ...

最新文章

  1. Hybris Commerce的 Master Tenant和Netweaver的System Client
  2. linux httppost 请求接口参数被截断_记一次小程序图片安全接口和CountDownLatch的使用...
  3. opencv读取视频并保存为图片
  4. COOKIE伪造登录网站后台
  5. Apache Lens —— 统计数据分析查询接口
  6. vue监听对象某一个属性
  7. springboot 整合 mongodb实现 批量更新数据
  8. centos和redhat启用epel软件库
  9. python标准库使用教程_Python标准库概览
  10. 【lpxt】笔者支招:九招搞定显示器黑屏
  11. 计算机控制面板没,没有nvidia控制面板,手把手教你电脑没有nvidia控制面板
  12. 手写字体生成器,这种软件居然被大佬做出来了!
  13. python层次分析法案例_在R语言中使用层次分析法-案例1
  14. neu1482 2014辽宁省赛Picking Cabbage(状态压缩)
  15. MySQL报错端口3306解决方法
  16. 常见的网站攻击与防御,道高一尺,魔高一丈
  17. nginx 前端小图标配置
  18. 高斯消元法的MATLAB代码
  19. Android 打点方式总结
  20. 海量数据实战(0)从两个文件50亿数据中找出相同的URL

热门文章

  1. 五分钟学会 Spring Cloud Sleuth:分布式请求链路跟踪(小白必看,一看就会教程)
  2. 京东与腾讯续签三年战略合作协议;起薪涨至26万元!韩国三星SK争相加薪留住半导体人才;Firefox 102 发布|极客头条...
  3. 实战CenterNet,训练猫脸关键点检测数据集并测试
  4. Android 获取SIM卡信息
  5. ESIM模型详细解读
  6. 技术美术个人笔记(十五)——虚幻渲染管线笔记
  7. 发布我在esnips上传的东东
  8. ChatGPT将批量文档翻译成中文的方法
  9. ad16怎么画弧线_手把手教你用GraphPad Prism绘制生存曲线
  10. 以太坊源码之『RLP』