C语言数组的各种操作梳理

目录
  • 一、一维数组
    • 1.创建
    • 2.初始化
    • 3.使用
    • 4.数组在内存中的存储
    • 5.数组大小的计算
  • 二、二维数组
    • 1.创建
    • 2.初始化
    • 3.使用
    • 4.二维数组在内存中的存储
  • 三、数组作为函数参数
    • 1.关于数组名是数组首元素的地址的两个例外
    • 2.冒泡排序

一、一维数组

1.创建

//如何创建数组
int num[10];
char arr[10];
double sum[10];
float fix[10];
//变长数组
//数组的大小是变量
//C99语法支持
int a = 10;
int arr[a];

2.初始化

int arr[3] = {1,2,3};
//int数组类型
//arr数组名
//[3]数组有3个元素
//{1,2,3}初始化元素为1,2,3

3.使用

#include<stdio.h>
int main()
{
	int arr[10] = { 0 };//给每个元素初始化为0
     //数组是通过下标访问的
    //下标是从0开始的
	int arr[4] = 5;//把下标是4的元素给赋值为5
	printf("%d\n", arr[4]);//输出的是数组中第5个元素的值
	return 0;
}
//结果是5

4.数组在内存中的存储

5.数组大小的计算

int arr[10];
int sz = sizeof(arr)/sizeof(arr[0]);
//sizeof(arr)计算的是数组的总大小
//sizeof(arr[0])计算的是第一个元素大小
//总大小/第一个元素大小=元素个数

二、二维数组

1.创建

//创建一个3行3列的数组
int arr[3][3];
char sum[3][3];
//[]行的部分可以省略,列的不可以
int arr[][3];
char sum[][3];

2.初始化

//创建的同时赋值
//3行3列的二维数组有9个元素
int arr[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int sum[][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

3.使用

二维数组行和列的下标也是从0开始的

#include<stdio.h>
int main()
{
    int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
    int i = 0;
    int j = 0;
    //遍历二维数组
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            //输出行和列元素组成的坐标
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

输出结果:

4.二维数组在内存中的存储

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

输出结果:

二维数组在内存中也是连续存放的

一行是连续,跨行也是连续

三、数组作为函数参数

1.关于数组名是数组首元素的地址的两个例外

(1)sizeof[数组名] - 数组名表示的是整个数组 - 计算的是整个数组的大小 - 单位是字节。

(2)&数组名 - 数组名表示整个数组 - 取出的是整个数组的地址。

2.冒泡排序

(1) 冒泡排序的思想:两两相邻的元素进行比较,并且可能会进行交换

(2)代码示例

#include<stdio.h>
void bubble_sort(int arr[], int sz)//形参arr本质是指针
{
    //确定趟数
    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 i = 0;
    int arr[] = { 5,4,3,2,1,0 };
        //排序为升序-冒泡排序
        //计算数组元素个数
    int sz = sizeof(arr) / sizeof(arr[0]);
    bubble_sort(arr, sz);//冒泡排序的函数的调用
    //数组传参的时候,
    //传递的其实是数组首元素的地址
    for (i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

输出结果:

0 1 2 3 4 5

到此这篇关于C语言数组的各种操作梳理的文章就介绍到这了,更多相关C语言数组内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言 从根本上理解数组

    目录 一.数组的概念 二.数组的大小 三.数组地址与数组名 四.数组名的盲点 五.小结 一.数组的概念 数组是相同类型的变量的有序集合 二.数组的大小 数组在一片连续的内存空间中存储元素 数组元素的个数可以显示或隐式指定 下面看一段数组初始化的代码: #include <stdio.h> int main() { int a[5] = {1, 2}; int b[] = {1, 2}; printf("a[2] = %d\n", a[2]); printf("a[

  • C语言全方位讲解数组的使用

    目录 一维数组的创建和初始化 1.数组的创建 2.数组创建方式 3.数组的初始化 一维数组的使用 一维数组的存储 二维数组的创建与初始化 1.二维数组的创建 2.二维数组的初始化 二维数组的存储 数组的越界 总结 接着上次的操作符的详解,让我们来简单了解C语言里的数组. 一维数组的创建和初始化 1.数组的创建 数组是一组相同类型的元素的集合. 2.数组创建方式 type_t(数组类型) arr_name(数组名) [const_n](用来指定数组大小) 3.数组的初始化 数组的初始化是在其定义的

  • C语言 详细讲解数组参数与指针参数

    目录 一.C语言中的数组参数退化为指针的意义 二.二维数组参数 三.等价关系 四.被忽视的知识点 五.小结 一.C语言中的数组参数退化为指针的意义 C 语言中只会以值拷贝的方式传递参数 当向函数传递数组时: 将整个数组拷贝一份传入函数        × 将数组名看做常量指针传数组首元素地址    √ C 语言以高效作为最初设计目标: a) 参数传递的时候如果拷贝整个数组执行效率将大大下降. b) 参数位于栈上,太大的数组拷贝将导致栈溢出. 二.二维数组参数 二维数组参数同样存在退化的问题 二维数

  • C语言数组超详细讲解上

    目录 前言 1.一维数组的创建和初始化 1.1 一维数组的创建 1.2 一维数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 2.二维数组的创建和初始化 2.1 二维数组的创建 2.2 二维数组的初始化 2.3 二维数组的使用 2.4 二维数组在内存中的存储 3.数组越界 4.数组作为函数参数 4.1 冒泡排序函数的错误设计 4.2 数组名是什么? 4.3 对数组名的用法进行总结 4.4 冒泡排序函数的正确设计 总结 前言 本文主要介绍数组相关的内容,主要内容包括: 一维数组

  • C语言数组的各种操作梳理

    目录 一.一维数组 1.创建 2.初始化 3.使用 4.数组在内存中的存储 5.数组大小的计算 二.二维数组 1.创建 2.初始化 3.使用 4.二维数组在内存中的存储 三.数组作为函数参数 1.关于数组名是数组首元素的地址的两个例外 2.冒泡排序 一.一维数组 1.创建 //如何创建数组 int num[10]; char arr[10]; double sum[10]; float fix[10]; //变长数组 //数组的大小是变量 //C99语法支持 int a = 10; int ar

  • C语言数组全面总结梳理

    目录 一,一维数组 1.创建和初始化 2.使用下标访问 3.在内存中的存储 二,二维数组 1.创建和初始化 2.使用下标访问 3.在内存中的存储 三,越界问题 数组(array)是由一系列类型相同的元素构成. 一般形式: 类型     数组名  [常量表达式] 一,一维数组 1.创建和初始化 创建一堆相同元素的集合,以整型为例: //创建大小为8的整型数组 int arr1[8]; // []里面应放常量,因此若: int num=8; //则有: arr2[num]; num为变量,创建失败

  • go语言题解LeetCode453最小操作次数使数组元素相等

    目录 题目描述 思路分析 AC 代码 小结 遍历数组一次 解题思路 代码 强行找规律 解题思路 代码 题目描述 原题链接 : 453. 最小操作次数使数组元素相等 - 力扣(LeetCode) (leetcode-cn.com) 给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 .返回让数组所有元素相等的最小操作次数. 示例 1: 输入:nums = [1,2,3] 输出:3 解释: 只需要3次操作(注意每次操作会增加两个元素的值): [1,2,3] => [2,3,3

  • C语言 语义陷阱超详细梳理总结

    目录 1 指针与数组 2 非数组的指针 3 作为参数的数组声明 4 空指针并非空字符串 5 边界计算与不对称边界 6 求值顺序 7 整数溢出 8 为函数提供返回值 1 指针与数组 C语言中只有一维数组.数组中的元素可以是任意类型的对象,这也是多维数组构建的理论基础所在 对于一个数组,我们只能做两件事:确定该数组的大小以及获得该数组下标为0的元素的指针.任何一个数组下标运算都等同于一个对应的指针运算. 数组名代表首元素的地址,无法对其进行++或者–操作,换句话说,我们无法改变数组名(表示的值),因

  • GO语言数组和切片实例详解

    本文实例讲述了GO语言数组和切片的用法.分享给大家供大家参考.具体分析如下: 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式:[length]Type .[N]Type{value1, value2, ... , valueN}.[...]Type{value1, value2, ... , valueN} 如下: 复制代码 代码如下: func test5() {     var iarray1 [5]int32    

  • C语言数组入门之数组的声明与二维数组的模拟

    语言中指针与数组这两个概念之间的联系是密不可分的,以至于如果不能理解一个概念,就无法彻底理解另一个概念. C语言中的数组值得注意的地方有以下两点: C语言中只有一维数组,而且数组的大小必须在编译期就作为一个常数确定下来.然而,C语言中数组的元素可以是任何类型的对象,当然也可以是另外一个数组.这样,要"仿真"出一个多维数组就不是一件难事. 对于一个数组,我们只能够做两件事:确定该数组的大小,以及获得指向该数组下标为0的元素的指针.其他有关数组的操作,哪怕它们看上去是以数组下标进行运算的,

  • PHP弱类型语言中类型判断操作实例详解

    本文实例讲述了PHP弱类型语言中类型判断操作.分享给大家供大家参考,具体如下: 1.php一个数字和一个字符串进行比较或者进行运算时,PHP会把字符串转换成数字再进行比较.PHP转换的规则的是:若字符串以数字开头,则取开头数字作为转换结果,若无则输出0. 例如:123abc转换后应该是123,而abc则为0,0==0这当然是成立的.具体可以参考官方手册:如果比较一个整数和字符串,则字符串会被转换为整数 $a = ($b=4)+5; echo $a; //9 echo '<p>'; var_du

  • 易语言通过“打开”命令操作数据库

    打开指定的数据库文件.成功返回真,并自动将当前数据库设置为此数据库,失败返回假. 语法: 逻辑型 打开 (数据库文件名,[在程序中使用的别名],[是否只读],[共享方式],[保留参数1],[数据库密码],[索引文件表],- ) 参数名 描 述 数据库文件名 必需的:文本型. 在程序中使用的别名 可选的:文本型.别名为在后面的程序中引用本数据库时可使用的另一个名称.欲引用一个已经被打开的数据库可以使用该数据库本身的名称(数据库名称为数据库文件名的无路径和后缀部分.譬如 c:\my document

  • 详解C语言数组越界及其避免方法

    所谓的数组越界,简单地讲就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外,这类错误也是 C 语言程序中最常见的错误之一. 在 C 语言中,数组必须是静态的.换而言之,数组的大小必须在程序运行前就确定下来.由于 C 语言并不具有类似 Java 等语言中现有的静态分析工具的功能,可以对程序中数组下标取值范围进行严格检查,一旦发现数组上溢或下溢,都会因抛出异常而终止程序.也就是说,C 语言并不检验数组边界,数组的两端都有可能越界,从而使其他变量的数据甚至程序代码

  • C语言数组添加和删除元素的实现

    数组不擅长插入(添加)和删除元素.数组的优点在于它是连续的,所以查找数据速度很快.但这也是它的一个缺点.正因为它是连续的,所以当插入一个元素时,插入点后所有的元素全部都要向后移:而删除一个元素时,删除点后所有的元素全部都要向前移. 插入算法 # include <stdio.h> int main(void) { int a[23] = {1, 5, 66, 8, 55, 9, 1, 32, 5, 65, 4, 8, 5, 15, 64, 156, 1564, 15, 1, 8, 9, 7,

随机推荐