C语言入门(十五)之二维数组

版权声明:如果觉得文章对你有用,转载不需要联系作者,但请注明出处 https://blog.csdn.net/jinxin70/article/details/83279863

二维数组

数组中的每一个元素又是一个数组, 那么这个数组就称之为二维数组。


元素类型 数组名称[一维数组的个数][每个一维数组的元素个数];
元素类型 数组名称[行数][列数];
     
元素类型: 说明二维数组中每个一维数组存储什么类型的数据
一维数组的个数: 说明二维数组有多少个元素
每个一维数组的元素个数 :  说明二维数组中每一个一维数组的元素个数

char names[2][3] =
    {
//        0    1    2
        {'l', 'n', 'j'}, // 0
        {'x', 'm', 'g'} // 1
    };

如何获取二维数组中的一维数组的元素的值

printf("%c\n", names[0][1]);

如何遍历二维数组

for (int i = 0; i < 2; i++) { // 0 , 1
        // 1.取出一维数组
//        names[i];
        for (int j = 0; j < 3; j++) { // 0 , 1 , 2
            printf("name[%i][%i] = %c\n", i, j, names[i][j]);
        }
    }

注意:二维数组的多种初始化方式(不强记,用到的时候可以去搜)

二维数组与函数

同样的,数组的名称就是数组的地址。

&nums == nums == &nums[0]

char names[2][3] =
    {
        {'l', 'n', 'j'},
        {'x', 'm', 'g'}
    };
//    &names == names == &names[0] , names就是数组的地址
    printf("&names = %p\n", &names);
    printf("names = %p\n", names);
    printf("&names[0] = %p\n", &names[0]);

二维数组名称作为函数参数传递, 传递的也是地址。

比如,

1、执行如下函数

change2(names);
printf("names[0][0] = %c\n", names[0][1]);
void change2(char values[2][3])
{
    values[0][1] = 'w';
    printf("我执行了\n");
}

将会输出

扫描二维码关注公众号,回复: 3681920 查看本文章
我执行了
names[0][1] = w

2、执行

change3(names[0]);
printf("names[0][0] = %c\n", names[0][0]);
void change3(char values[])
{
    values[0] = 'Q';
     printf("我执行了\n");
}

注意:以后只要看到函数的参数是一个数组, 那么就是地址传递

将会输出:

我执行了
names[0][0] = Q

注意:names[0][0] == 一维数组的一个元素 == 值

names[0] == 一维数组

3、执行

change4(names[0][0]);
printf("names[0][0] = %c\n", names[0][0]);
/ 参数为基本数据类型
void change4(char value)
{
    value = 'E';
     printf("我执行了\n");
}

输出为:

我执行了
names[0][0] = l

因为change4传入的是基本数据类型,不是数组,所以也不会改变原数组的值。

猜你喜欢

转载自blog.csdn.net/jinxin70/article/details/83279863