美文网首页
07-C语言二维数组

07-C语言二维数组

作者: 低头看云 | 来源:发表于2018-09-07 15:50 被阅读0次

二维数组

  • 格式: 数据类型 数组名称[一维数组的个数][一维数组中元素的个数]

    • 数据类型:一维数组中存储数据的类型;
    • 数组名称:标识符
    • 一维数组的个数:表示当前二维数组中包含多少个一维数组
    • 一维数组中元素的个数:表示当前二维数组中国每一个一维数组元素的个数
    int a[2][3] = {{1,3,5},{7,9,11}};
    // 可以看作由一维数组a[0]和一维数组a[1]组成,这两个一维数组都包含了3个int类型的元素
    
  • 二维数组的遍历
for(int i = 0; i < 2; i++){  // 外循环取出一维数组
    for(int j = 0; j < 3; j++){ // 内循环取出一维数组的每个元素
        printf("a[%i][%i] = %i\n", i, j, a[i][j]);
    }
}
- 注意: 必须强调:a[0],a[1]不能当做下标变量使用,他们是数组名,不是一个单纯的下表量    

二维数组的初始化

  • 定义的同时初始化
// 定义的同时初始化
int nums[2][3] = {{1,3,5},{2,4,6}};

  • 先定义后初始化
int nums[2][3];
nums[0][0] = 111;
nums[0][1] = 111;
nums[0][2] = 111;
nums[1][0] = 111;
nums[1][1] = 111;
nums[1][2] = 111;

  • 完全初始化\部分初始化,可以省略第一维的长度(不推荐使用);
int a[][3] = {{1,2,3},{4,5,6}};
  • 注意不能省略一维数组元素的个数
int nums[2][] = {{1,3,5}{2,4,6}}; // 会报错

二维数组的存储

  • 给数组分配存储空间从内测地址大开始分配
  • 给数组元素分配空间,从所占用内存地址小的开始分配
  • 往每个元素中存储数据从搞地质开始存储
#include <stdio.h>
int main()
{
    char cs[2][3] = {
        {'a', 'b', 'c'},
        {'d', 'e', 'f'}
    };
    // cs == &cs == &cs[0] == &cs[0][0]
    printf("cs = %p\n", cs);                // 0060FEAA
    printf("&cs = %p\n", &cs);              // 0060FEAA
    printf("&cs[0] = %p\n", &cs[0]);        // 0060FEAA
    printf("&cs[0][0] = %p\n", &cs[0][0]);  // 0060FEAA
    return 0;
}


二维数组与函数

  • 传递参数时的注意点:
    • 一定要记住,不要管实参传递是什么,只看形参就可以了
    • 如果形参是基本数据类型,那么在函数内修改形参不会影响到外界的实参
    • 如果形参是数组,那么在函数内修改形参会影响到外界的实参;
#include <stdio.h>

void change(char ch){
    ch = 'T';
}
void change2(char ch[]){
    ch[0] = 'T';
}
void change3(char ch[][3]){
    ch[0][0] = 'T';
}
int main()
{
    char names[2][3] = {{'c','w','w'},{'p','j','j'}};
    printf("char[0][0] = %c\n", names[0][0]); //    c   c   c
    //change(names[0][0]);  // 基本类型,不会影响到外面的实参;
    //change2(names[0]);
    change3(names);
    printf("char[0][0] = %c\n", names[0][0]); //    c   T   T
    return 0;
}

  • 注意点:
    • 形参的写法: 二维数组不可以省略列数
    void test(char cs[2][]) // 错误写法
    {
        printf("我被执行了\n");
    }
    
    void test(char cs[2][3]) // 正确写法
    {
        printf("我被执行了\n");
    }
    
    void test(char cs[][3]) // 正确写法
    {
        printf("我被执行了\n");
    }
    
    
    
    • 二维数组作为函数参数,在被调函数中不能获得其有多少行,需要通过参数传入
    void test(char names[2][3]){
        int row = sizeof(names);  // 4,或8
        printf("row = %i\n", row);
    }
    
    
    
    • 二维数组作为函数参数,在被调用函数中可以计算出二维数组有多少列
    void test2(char names[2][3]){
        size_t col = sizeof(names[0]);   // 3
        printf("row = %i\n", col);
    }
    

相关文章

  • 07-C语言二维数组

    二维数组 格式: 数据类型 数组名称[一维数组的个数][一维数组中元素的个数]数据类型:一维数组中存储数据的类型;...

  • C语言的指针与数组(进阶篇之二)

    二、二维数组与指针 (1).二维数组元素在内存中的存放方式C语言中,二维数组元素值在内存中是线性的。跟一维数组相差...

  • go 语言数组

    go 语言数组 1. 数组定义 数组定义 使用 ":=" 符号定义数组 定义二维数组 2. 数组遍历 数组遍历 3...

  • 2019-02-28 计算机二级C语言程序设计之数组(下)

    参考资料:高教版《全国计算机等级考试二级教程——C语言程序设计》《21天学通C语言》 二维数组的定义和二维数组元素...

  • Day08

    二维数组 二维数组格式 二维数组初始化 二维数组的遍历 二维数组内存存储细节 二维数组与函数注意点: 主要是看函数...

  • PHP 工具之数组

    二维数组值 二维数组翻转 二维数组转置

  • 静心沉淀,厚积薄发

    今天主要是看来c语言中关于数组的知识,数组按照空间大小的不同,数组分为一维数组,二维数组,多维数组,按照元素种...

  • C语言数组——二维数组

    C语言系列目录 C/C++学习资源(百度云盘链接)计算机二级资料(过级专用)C语言学习路线(从入门到实战)编写C语...

  • 笔记:二维数组,字符串,指针

    #mark- 01-二维数组基本概念 //问题:什么是二维数组?二维数组的格式?二维数组如何存储?二维数组是如何遍...

  • Java 二维数组格式、二维数组内存图解、二维数组操作

    二维数组格式1 格式1内存图解 二维数组格式2 二维数组格式2 内存图解 二维数组格式3 二维数组格式3 内存...

网友评论

      本文标题:07-C语言二维数组

      本文链接:https://www.haomeiwen.com/subject/qqmcgftx.html