文章目录

  • 一、数组
    • 1.1 为什么需要数组
    • 1.2 数组的分类
    • 1.3 一维数组
      • 1.3.1 定义数组
        • 1.3.1.2 基本操作
          • 1.3.1.2.1 初始化
          • 1.3.1.2.2 查找
          • 1.3.1.2.3 赋值
          • 1.3.1.2.4 数组复制
          • 1.3.1.2.5 数组排序
    • 1.4 二维数组
      • 1.4.1 初始化
      • 1.4.2 基本操作
        • 1.4.2.1 输出数组的内容
    • 1.5 多维数组

一、数组

1.1 为什么需要数组

1、为了解决大量同类型数据的存储和使用问题
2、为了模拟现实世界

1.2 数组的分类

数组有三种分类:

1、一维数组
2、二维数组
3、多维数组

1.3 一维数组

1.3.1 定义数组

1、为n个变量连续分配存储空间。
2、所有的变量数据类型必须相同
3、所有变量所占的字节大小必须相等

1.3.1.2 基本操作

1.3.1.2.1 初始化
  • 完全初始化
int a[5] = {1, 2, 3, 4, 5}; //在定义数组时就完全赋值
  • 不完全初始化,未被初始化的元素自动为零
int a[5] = {1, 2, 3};// 在定义数组时部分值初始化
  • 不初始化,所有元素的值不确定,都是垃圾值
int a[5];
  • 零数组
int a[5] = {0}; // 所有的元素都为零
  • 只有在定义数组的同时才可以整体赋值,其他情况下整体赋值都是错误的
int a[5] = {1, 2, 3, 4, 5};
  • 初始化只读数组
    有时需要把数组设置为只读,这时只能从数组中检索值,不能把新值写入数组。要创建这样的数组时,应该用const关键字声明和初始化数组。
// 使用const关键字声明后,该数组就只能读,不能修改
const char ch[5]={1, 2, 3, 4, 5};
1.3.1.2.2 查找

数组的查找是按下标索引进行的,索引是从0开始。

#include <stdio.h>int main(){// 定义一个数组
char ch[5]={11, 21, 22, 33, 44};// 取出数组的第2个值,因为索引是从0开始,ch[1]表示取出数组的第二个值。
printf("%d", ch[1]); // 返回21return 0;
}

当需要取出数组全部的值时,要使用循环的方式取出全部的值

#include <stdio.h>int main(){//定义数组
char ch[5]={11, 21, 22, 33, 44};
// 定义自增变量
int i;
// for循环取值
for(i=0; i<5; i++){printf("%d\n", ch[i]);
}return 0;
}

字符数组的全部取出可以借助strlen()函数计算数组的长度。

#include <stdio.h>
// 使用strlen函数需要引用此头文件
#include <string.h>int main(){//定义字符数组
char arr[]={'a', 'b', 'c', 'd'};
// 自增变量
int i;
// 循环取出字符数组的值。strlen计算arr数组的长度,但索引从0开始,需要减1
for(i=0; i<strlen(arr)-1; i++){printf("%c\n", arr[i]);
}return 0;
}
1.3.1.2.3 赋值

声明数组后,可以借助数组下标(或索引)给元素赋值。对要赋值修改的元素的下标直接赋值即可。

#include <stdio.h>
#include <string.h>int main(){char arr[]={'a', 'b', 'c', 'd'};int i;
// 将arr数组的第2个元素修成'e'
arr[1] = 'e';
for(i=0; i<strlen(arr)-1; i++){printf("%c\n", arr[i]);
}return 0;
}
1.3.1.2.4 数组复制

在C语言种不能直接将1个数组赋值给另一个数组。需要遍历循环赋值给另一个数组。

int a[5] = {1, 2, 3,  4, 5};
int b[5];
//如果要把a数组中的值全部复制给b数组

错误写法:

b = a   //error

正确写法:

for (i = 0; i < 5; ++i)b[i] = a[i]
1.3.1.2.5 数组排序

这里先放置一个简单的冒牌排序,后面会继续详解

# include <stdio.h>// 冒泡排序函数
void bubble_sort(int arr[], int len){int i, j;int temp=0;for(i=0;i<len;i++){for (j = 0; j<len-i-1; j++){if (arr[j] > arr[j+1]){temp=arr[j];arr[j]= arr[j+1];arr[j+1]=temp;}}}
}// 主函数
int main(void){int i;int arr[]={5, 2, 7, 6, 9, 3, 4, 12, 10};int len = sizeof(arr)/sizeof(int);// bubble_sort(arr, len);for (i = 0; i < len; i++){printf("%d\n", arr[i]);}return 0;
}

1.4 二维数组

二维数组表示的是行和列,如下实例则表示一个3行4列的二维数组。二维数组在内存中存储时是存储在连续的内存空间中。

int a[3][4]; //总共有12个元素,可以当作3行4列看待。a[i][j]表示第i+1行第J+1列的元素

1.4.1 初始化

二维数组同一维数组一样,同样有完全初始化和不完全初始化。不完全初始化时未初始化的值为零。

完全初始化方式一:

int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

完全初始化方式二:

int a[3][4] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};

不完全初始化:

// 不完全初始化,后面的8个元素全为0
int arr[3][4]={1, 2, 3, 4}
1、在初始化时,行可以省略,但列不能省略。
2、初始化时建议使用方式二的方式初始化。

1.4.2 基本操作

1.4.2.1 输出数组的内容
# include <stdio.h>int main(void){int a[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}};int i, j;for (i = 0; i < 3; ++i){for (j = 0; j < 4; ++j)printf("%-5d ",a[i][j]);    //-5表示左对齐五个字符。printf("\n");}return 0;
}

1.5 多维数组

1、是否存在多维数组
不存在,因为内存是线性唯一的,n维数组可以当作每个元素是n-1维数组的一维数组。
比如:

int a[3][4]

可以当做每个元素都含有4个小元素的一维数组。

int a[3][4][5]

该数组含有3个元素的一维数组,只不过每个元素都是4行5列的二维数组。

C语言学习(七)之数组相关推荐

  1. 如何判断数组所有数都不等于一个数_工程师编程,C语言学习,关于数组方面的一些总结...

    在学习编程语言时,无论如何我们都逃不掉关于数组这个问题. 那么,在谈及这个问题时,我会从三个方面来思考: 1.数组的定义是什么,也就是何为数组? 2.如何在数组中填充元素(数据)? 3.如何用数组来解 ...

  2. c语言学习之可变数组

    今天学习了中国大学mooc上翁恺老师<C语言程序设计>的第14课链表.在学习链表之前,老师讲解了普通的可变数组的实现. 前奏:可变数组的实现(有缺陷) 首先定义一个结构体,内部存在一个指针 ...

  3. c语言数组与指针的基础知识,C语言学习笔记之数组与指针的关系

    首先,大家先需知道一个关于基类型的概念 基类型:组成一个新类型的基础类型 这句话是什么意思呢?举个例子: int a[3] = {1,2,3}; 上面是由三个int类型的数组成一个新的类型也就是数组, ...

  4. C语言学习之将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1. 要求改为1,4,5,6,8。

    将一个数组中的值按逆序重新存放.例如,原来顺序为8,6,5,4,1. 要求改为1,4,5,6,8. #include <stdio.h> #define N 5 void main(){i ...

  5. 21 11 7 C语言学习总结(数组越界,数组名作为函数参数,数组名)

    一 数组越界 数组的下标是有范围限制的 数组的下标规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1 所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的 ...

  6. 【C语言学习】 输出数组中最大的数

    一.题目要求,自定义一个数组,要求输出数组中最大的值. 二.解题思路: 1.先求出数组中的长度,也就是数组的个数. 2.编写一个循环,利用数组的长度下标作为限制,进行循环,将较大的值与较小的值进行替换 ...

  7. C语言学习 二维数组行列互换

    二维数组行列互换 Description 将一个二维数组的行和列元素互换,存放到另一个二维数组中. Input 第一行输入两个整数m和n分别表示二维数组的行数和列数(均小于20). 下一行输入该二维数 ...

  8. SQL语言之DQL语言学习(七)分组查询

    语法 select分组函数,列(要求出现在group by的后面) from 表 where 筛选 group by 分组列表 order by 排序子句 案例一: 查询每个工种的最高工资 SELEC ...

  9. C语言学习11:strlen()函数详解

    目录 1.strlen()函数功能 2.strlen()函数的使用 2.1 数组 3.注意事项 1.strlen()函数功能 strlen()函数 用于 计算 指定字符串的 长度,但 不包括 结束字符 ...

  10. C语言如何加缓冲,C语言学习笔记之输出缓冲

    在c语言中经常用到输出函数printf,当我们像往常一样在输出函数中输入我们的想要的输出的东西后加\n换行 验证结果如我们输出的一样 如果我们在后面加入死循环会不会出现这些语句呢 结果卡死了,可还是输 ...

最新文章

  1. (0076)iOS开发之UIWebView嵌套直播平台(不涉及播放器技术的开发)
  2. 核心概念 —— 门面(Facades)
  3. Spring基础知识和配置
  4. 语义化版本命名通行规则
  5. 《重构-改善既有代码的设计》学习笔记(一)
  6. JAVA程序获取Tomcat的运行状态
  7. jeecg框架中时间控件时分秒的显示
  8. 实验1 JavaEE开发环境配置与基础练习(JSP)
  9. gitlab权限分配
  10. 数据结构之队列的应用-超好玩的汽车加油站模拟器(C语言)
  11. STM32制作FLASH字库
  12. SQLServer@@FETCH_STATUS含义
  13. 什么是网站被黑?网站被黑具体症状表现、网站被黑了怎么办
  14. 《强化学习与最优控制》学习笔记(三):强化学习中值空间近似和策略空间近似概述
  15. C#中Get和Set的用法
  16. 妊娠对静息状态大脑活动、白质微结构、神经代谢物浓度和灰质结构的影响
  17. 用计算机控制操作照相机,摄影教程:用电脑控制相机远程拍摄
  18. python-线程池的使用
  19. 51单片机控制步进电机Protues仿真设计
  20. 初中动画flash作品_初中信息技术 Flash动画制作教案

热门文章

  1. iMeta:高颜值绘图网站imageGP+视频教程合集,已被引360次(220625更新)
  2. 高等数学(第七版)同济大学 总习题十一 个人解答
  3. 现在的FM电台呀,什么玩艺儿
  4. Playing games
  5. PostgreSQL 简介
  6. win7屏幕亮度怎么调_win7屏幕亮度调整方法
  7. python 相关性fdr矫正_你的p值,进行FDR校正了吗?
  8. Windows上USB设备检测
  9. 系统分析师---论软件的系统测试及应用
  10. 战火与秩序迁城显示服务器忙,《战火与秩序》如何迁城 迁城方法详解