C学习笔记-数组
数组的概念
数组是一组具有相同数据类型的变量集合,这里要注意两点,数组只能存储相同的数据类型和数组的内存是连续的,这位数组和指针的联系奠定了基础。
一维数组
定义及初始化
一维数组指的是只有一个下标的数组,它用来表示一组具有相同类型的数据
其格式为
类型说明符 数组名[常量表达式];
e.g.
int arr[3];
上式表达的是定义了一个一维数组,其数据类型是int,arr是数组名称,3表示的是数组长度。其包含的为arr[0]
,arr[1]
,arr[2]
,没有arr[3]
,使用arr[3]
会造成数组越界错误
数组的初始化有三种方式:
- 直接对数组按位数初始化
int arr[3] = {1, 2, 3};
- 初始化部分元素,此时剩余元素默认设置为0
int arr[3] = {1, 2};
- 不指定数组长度,此时长度会自动按照元素个数赋值
int arr[] = {1, 2, 3};
一维数组的使用
要使用数组元素,就需要使用符合数组使用规则的使用方式,数组使用格式如下:
数组名[下标]
注:在数组中,下标是以0开始的
- 一维数组的遍历
数组中的一个常见操作就是对数组进行遍历
int arr[3] = { 1, 2, 3};
int i = 0;
for (i = 0; i < 3; i++)
{
printf("arr[%d] = %d\n", i, arr[i]);
}
- 获取一维数组的最值
最值得获取也是一维数组的常见操作
假设第一个值是最大值,然后依次和后面的值对比,通过不断替换从而得到最大值
int arr[5] = {1, 6, 7, 2, 5};
int max = arrx[0];
int i = 0;
for (i = 1; i < 5; i++)
{
if (arr[i] > max)
{
max = x[i];
}
}
printf("max = %d\n", max);
- 一维数组的排序
一维数组有一个很重要的应用就是排序,排序中有两个排序比较重要,面试什么的最喜欢的。一个是冒泡排序,一个是选择排序。- 冒泡排序原理
- 从第一个元素开始,将相邻的两个元素依次进行比较,直到最后两个元素完成比较。如果前一个元素比后一个元素大,则交换它们的位置。整个过程完成后,数组中最后一个元素自然就是最大值,这样也就完成了第一轮的比较。
- 除了最后一个元素,将剩余的元素继续进行两两比较,过程与第一步相似,这样就可以将数组中第二大的数放在倒数第二个位置。
- 依次类推,持续对越来越少的元素重复上面的步骤,直到没有任何一对元素需要比较为止
- 冒泡排序原理
int x[5] = { 9, 8, 3, 5, 2 };
int m = 0, n = 0;
int temp = 0;
int i = 0;
printf("冒泡排序前:\n");
for (i = 0; i < 5; i++)
{
printf("%d ", x[i]);
}
printf("\n");
for (m = 0; m < 5 - 1; m++)
{
for (n = 0; n < 5 - 1 - m; n++)
{
if (x[n] > x[n + 1])
{
temp = x[n];
x[n] = x[n + 1];
x[n + 1] = temp;
}
}
}
printf("冒泡排序后:\n");
for (i = 0; i < 5; i++)
{
printf("%d ", x[i]);
}
printf("\n");
二维数组
定义及初始化
二维数组可以看作一维数组的每个元素又是一个一维数组,其格式为:
类型说明符 数组名[常量表达式1][常量表达式2];
e.g.:
int arr[2][3];
二维数组的初始化:
- 按行赋值
int arr[2][3] = {{1, 2 ,3}, {4, 5, 6}};
- 综合赋值
int arr[2][3] = {1, 2, 3, 4, 5, 6};
- 部分赋值
int arr[2][3] = {{1},{1, 2, 3}};
注:对数组赋值时,二维数组的第一个下标可以省略,而第二个下标不可省略!
arr
<=> *arr
<=> &arr
<=> &arr[0][0]
<=> array[0]
在二维数组中。arr[0]
代表的是一个数组名,是一个右值。
arr + 1
与arr[0] + 1
代表的意义不同
二维数组的使用
二维数组的使用规则与一维数组类似,其格式为
数组名[下标][下标];
- 二维数组的遍历
int arr[3][4] = { {1,2,3,4 }, {5,6,7,8}, {9,10,11,12} };
for (int i = 0; i < 3; i++) //循环遍历行
{
for (int j = 0; j < 4; j++) //循环遍历列
{
printf("arr[%d][%d] = %d \t", i, j, arr[i][j]);
}
printf("\n");//每一行的末尾添加换行符
}
C学习笔记-数组的更多相关文章
- Java菜鸟学习笔记--数组篇(三):二维数组
定义 //1.二维数组的定义 //2.二维数组的内存空间 //3.不规则数组 package me.array; public class Array2Demo{ public static void ...
- JavaScript学习笔记-数组
数组 数组中的每个元素的位置是索引,索引是基于32位的由0开始的数值,最大索引为(2的32次方-2),最大长度为(2的32次方-3) 数组是无类型的:元素可为任意类型:动态的:可根据需要自动增长.缩减 ...
- JavaScript学习笔记——数组
javascript数组数组是一个可以存储 一组 或是 一系列 相关数据 的 容器. 一.为什么要使用数组. (1)为了解决大量相关数据的存储和使用的问题. (2)模拟真是的世界. 二.如何创建数组 ...
- JavaScript学习笔记-数组(1)
数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引.JavaScript数组是无类型的:数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类型.数 ...
- Java菜鸟学习笔记--数组篇(二):数组实例&args实例
基本类型实例 //1.定义一个一维数组,先声明,在分配空间 int []number;//生命,没有初始化,number=null number=new int[5];//初始化为默认值,int默认值 ...
- js学习笔记——数组方法
join() 把数组中所有元素转化为字符串并连接起来,并返回该字符串, var arr=[1,2,3]; var str=arr.join("#"); //str="1# ...
- JS学习笔记-数组
ECMAScript中没有提供类和接口等的定义,但它却是一门面向对象的语言,由于它能够通过其它 方式实现类似高级语言的面向对象功能,这些内容将在后面的文章中进行一步步的总结.此篇仅对JS中对象作简要说 ...
- PHP学习笔记-数组(1)
1-1 数组定义 1.什么是数组? 所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标.组 ...
- php 学习笔记 数组3
15.使用数组 1).并集(union) array_merge(array1,array2,array3..) 函数把两个或多个数组合并为一个数组,后面覆盖前面 2). 交集(intersecti ...
- php 学习笔记 数组2
10.切割数组 array_slice(array, offset, length);返回一个由原始数组中的连续元素组成的新数组,参数1为原始数组,参数2为要复制的起始位置, 参数3要复制的个数:新数 ...
随机推荐
- curl查看http请求消息的时长
1. -X 指定请求方式GET请求curl -X GET http://www.jackyops.com/search?data=123 # -X GET是可选的 POST请求curl -X POS ...
- python基于opencv实现人脸定位
import cv2 # 读取图片 img = cv2.imread("image.jpg") # 加载模型,模型可以从https://github.com/opencv/open ...
- BZOJ 2440 [中山市选2011]完全平方数 二分+容斥
直接筛$\mu$?+爆算?再不行筛素数再筛个数?但不就是$\mu^2$的前缀和吗? 放...怕不是数论白学了$qwq$ 思路:二分+容斥 提交:两次(康了题解) 题解: 首先答案满足二分性质(递增), ...
- hdu 5514 Frogs 容斥思想+gcd 银牌题
Frogs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- Codeforces Round #369 (Div. 2) C 基本dp+暴力
C. Coloring Trees time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- 【csp模拟赛2】黑莲花--数据结构+数论
没有什么能够阻挡,你对被阿的向往.天天 AK 的生涯,你的心了无牵挂. 虐过大佬的比赛,也曾装弱装逼.当你低头的瞬间,才发现旁边的人. 把你的四肢抬起来,使劲地往门上撞.盛开着永不凋零,黑莲花. —— ...
- 修改Ubuntu国内镜像
打开软件和更新:如下图 选择一个自己喜欢的镜像. 然后执行 sudo apt-get update 更新源. 结束 1.原文件备份 sudo cp /etc/apt/sources.list ...
- ****题(alb)
sol:较简单的dp题,n4随便写写,n3需要加一个小优化 int i,j,k,i1,j1,i2,j2; memset(dp,,sizeof dp); ;i<n;i+=) dp[][i][i+] ...
- 单链表之Java实现
初次接触java,用java也写了一个链表.代码如下: import java.io.*; class Node{ public int data; //数据域 public Node next; / ...
- 浏览器事件循环机制(event loop)
JS是单线程的 JS是单线程的,或者说只有一个主线程,也就是它一次只能执行一段代码.JS中其实是没有线程概念的,所谓的单线程也只是相对于多线程而言.JS的设计初衷就没有考虑这些,针对JS这种不具备并行 ...