C语言数组全面详细讲解

 更新时间:2022年05月09日 15:28:07   作者:龟π气功  
数组是一组有序的数据的集合,数组中元素类型相同,由数组名和下标唯一地确定,数组中数据不仅数据类型相同,而且在计算机内存里连续存放,地址编号最低的存储单元存放数组的起始元素,地址编号最高的存储单元存放数组的最后一个元素

1.基础知识

  1. C语言中使用数组表示多个连续的同类型的存储位置
  2. 使用数组表示多个连续存储位置的时候只需要一个名字,这个名字代表所有这些存储位置的整体
  3. 每一个存储位置有一个自己的编号,最前边的存储位置的编号是0,向后依次递增,最后一个存储位置的编号是个数减一,这个编号叫做下标
  4. 决不可以使用超过范围的下标
  5. 使用名称和下标就可以表示这组存储位置中的某一个

2.数组的分类

2.1按元素类型分类

  1. 字符数组:若干个字符变量的集合
  2. 短整型数组
  3. 整型数组
  4. 长整型数组
  5. 浮点型数组
  6. 指针数组
  7. 结构体数组

2.2按维数分类

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

3.数组定义和初始化

3.1 一维数组

格式: 数据类型 数组名[数组元素的个数]; 数组名和元素个数中间没有空格

int a[10]; 定义了一个名为a的数组,每个元素都是int类型,一共有10个元素

数组元素的个数在定义的时候也可以不写,但是需要初始化,如下例的b[ ]

#include<stdio.h>
int main(int argc,char *argv[]){
		int a[10];
		int b[] = {10,20,30};
		printf("sizeof(a) = %d\n",sizeof(a));
		return 0;
}

初始化

全部初始化 int a[5] = {1,2,3,4,5};

部分初始化,赋值不够的后面补0 int a[5] = 2;

#include<stdio.h>
int main(){
    // 如果不初始化,直接使用为随机值
    int a[4] = {2,3,6,5};
    printf("数组a的元素为:%d,%d,%d,%d\n",a[0],a[1],a[2],a[3]);       
    int b[4] = {2,5};
    printf("数组b的元素为:%d,%d,%d,%d\n",b[0],b[1],b[2],b[3]);         
}

3.2 二维数组

格式: 数据类型 数组名[行的个数][列的个数]

例如 int a[2][4]

解释:名为a的二维数组,每个元素都是int类型,包含两行四列元素,一共有8个元素 二维数组也是连续开辟空间,访问元素是行和列都是从0开始,分别是a[0][0] , a[0][1]…a[1][3]

注意:二维数组的行数可以省略,列数不能省略,在初始化的时候按照如下操作,系统会根据列数自动指定行数

#include<stdio.h>
int main(){
    int a[2][4];
    printf("sizeof(a)=%ld %ld\n",sizeof(a),2 * 4 *sizeof(int));
    // 省略行标:
    int b[][4] = {1,2,3,4,5};
    printf("sizeof(b)= %ld\n",sizeof(b));
    return 0;
}

初始化

逐行初始化:

#include<stdio.h>
int main(){
    int a[2][3] = {{1,2,3},{6,6,6}};
    int i = 0,j = 0;
    for(i = 0;i < 2;i++){
        for(j = 0;j < 3;j++){
            printf("%d,",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

部分初始化:

#include<stdio.h>
int main(){
    int a[2][3] = {{1,2},{6}};
    int i = 0,j = 0;
    for(i = 0;i < 2;i++){
        for(j = 0;j < 3;j++){
            printf("%d,",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

全局初始化:

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

4.数组元素的引用方法

一维数组:数组名[下标]

二维数组:数组名[行标][列标]

上例中已经通过a[ i ][ j ]进行引用,简单易懂

5.字符数组的定义

#include<stdio.h>
int main(){
    // 用字符的方式赋值
    char c1[] = {'c',' ','p','i','g'};
    printf("c1数组为:\n");
    for(int i = 0;i < 5;i++){
        printf("'%c',",c1[i]);
    }
    printf("\n");
    // 用字符串的方式赋值,多占1个字节,用于存放结束标志 ‘\0'
    char c2[] = "c pig";
    for(int j = 0;j < 6;j++){
        printf("'%c',",c2[j]);
    }
    // 二维数组  字符赋值
    char a[][5] = {
        {'a','b','v','g','y'},
        {'a','b','v','g','y'}
    };
    // 字符串赋值,知道为什么是6吗? 因为多了一个 '\0'
    char b[][6] = {"hello","world"};
    // 二维数组的元素读者可自行打印练习
    return 0;
}

练习:定义一个字符数组,通过scanf函数输入字符串并输出结果

#include<stdio.h>
int main(){
    //通过赋值”“这样的方式可以清除字符数组中的垃圾字符,让每一个元素都是 \0
    char ch[32] = "";
    printf("请输入一个字符串:\n");
    scanf("%s",ch);   //数组名就是当前数组的首地址
    printf("ch = %s\n",ch);
    return 0;
}

到此这篇关于C语言数组全面详细讲解的文章就介绍到这了,更多相关C语言数组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux UDP服务端和客户端程序的实现

    Linux UDP服务端和客户端程序的实现

    这篇文章主要介绍了Linux UDP服务端和客户端程序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • C++ 17转发一个函数调用的完美实现

    C++ 17转发一个函数调用的完美实现

    这篇文章主要给大家介绍了关于C++ 17如何转发一个函数调用的完美实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用C++17具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • 解决了个困扰了2天的问题,定点运算问题

    解决了个困扰了2天的问题,定点运算问题

    本文主要讲解定点运算问题,需要的朋友可以参考一下。
    2016-06-06
  • C语言线索二叉树基础解读

    C语言线索二叉树基础解读

    线索二叉树还是按照链二叉树的方法创建,只不过在结点原本为空的左指针改为指向该结点在中序遍历中的前驱,结点原本为空的右指针改为指向该结点在中序遍历中的后继,也就是说把空的指针给利用了起来
    2022-04-04
  • Qt xml操作的实现

    Qt xml操作的实现

    本文主要介绍Qt xml操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2008-08-08
  • C++指针与数组:指针详解

    C++指针与数组:指针详解

    本文从初学者的角度,深入浅出地讲解C++中的指针、数组指针,对最常混淆的引用传递、值传递和指针传递做了区处,需要的朋友可以参考下
    2021-09-09
  • C++文件的数据写入和文件的数据读取的方法实现

    C++文件的数据写入和文件的数据读取的方法实现

    本文主要介绍了C++文件的数据写入和文件的数据读取的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • C++面试八股文之如何避免死锁详解

    C++面试八股文之如何避免死锁详解

    在C++中,锁(Lock)是一种同步工具,用于保护共享资源,防止多个线程同时访问,那么如何避免死锁的情况出现呢,下面就为大家简单讲讲
    2023-07-07
  • c++如何保存vector到文件

    c++如何保存vector到文件

    这篇文章主要介绍了c++如何保存vector到文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • C语言基础知识点指针的使用

    C语言基础知识点指针的使用

    这篇文章主要介绍了C语言基础知识点指针的使用,下面文章将让我们掌握指针的概念和用法、指针与数组之间的关系、指针指向的指针、如何使用指针变量做函数参数等更多相关内容,需要的小伙伴可以参考一下
    2022-03-03

最新评论