【C语言笔记】<十三>二维数组

2018-05-06  本文已影响8人  大基本功
定义
int main(int argc, const char * argv[]) {
    // 1.二维数组的多种初始化方式
    // 1.定义的同时初始化
    int names[2][3] =
    {
        {'l', 'n', 'j'},
        {'x', 'm', 'g'}
    };
    // 2.先定义再初始化
    int names2[2][3];
    names2[0][0] = 'l';
    names2[0][1] = 'n';
    names2[0][2] = 'j';
    
    names2[1][0] = 'x';
    names2[1][1] = 'm';
    names2[1][2] = 'g';
    
    
    // 3.完全初始化
    int names3[2][3] =
    {
        {'l', 'n', 'j'},
        {'x', 'm', 'g'}
    };
    
    // 4.不完全初始化
    int names4[2][3] =
    {
        {'l', 'n'},
    };
    
    // 5.省略元素个数的两种写法
    // 明确的告诉二维数组, 我们有2个一维数组
    char names5[2][3] =
    {
        'l', 'n', 'j',
        'x', 'm', 'g'
    };
    char names15[2][3] =
    {
        'l', 'n', 'j',
        'x', 'm'
    };
    
    // 没有告诉二维数组我们有几个一维数组
    // 如果在"定义的同时"进行初始化, 那么一位数组的个数可以省略 \
    系统会自动根据每一个一维数组能够存放多少个元素, 自动根据初始化的值推断出二维数组中一共有多少个元素(多少个一维数组)
    char names6[][3] =
    {
        'l', 'n', 'j',
        'x', 'm', 'g',
        'n', 'b'
    };
    
    // 6.错误写法
    // 注意点: 每个一维数组的元素个数不能省略
    /*
    int names7[2][] =
    {
        {'l', 'n', 'j'},
        {'x', 'm', 'g'}
    };
     */
    /*
    // 搞不清楚应该分配多大的存储空间, 以及搞不清楚应该把哪些数据赋值给第一个数组, 以及哪些数据赋值给第二个数组
    int names7[2][] =
    {
        'l', 'n', 'j',
        'x', 'm', 'g'
    };
     */
    
    return 0;
}
二维数组和函数
#include <stdio.h>
void change(int nums[]);
void change2(char names[2][3]);
void change3(char values[]);
void change4(char value);

int main(int argc, const char * argv[]) {
    /*
    int nums[2] = {1, 2};
    // 数组的名称就是数组的地址
    // &nums == nums == &nums[0]
    change(nums);
    printf("nums[0] = %i\n", 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]);
    
//  二维数组名称作为函数参数传递, 是传递的地址
//    change2(names);
    // names[0] == 一维数组
//    change3(names[0]);
    
    // names[0][0] == 一维数组的一个元素 == 值
    change4(names[0][0]);
    
    printf("names[0][0] = %c\n", names[0][0]);
    return 0;
}

// 基本数据类型
void change4(char value)
{
    value = 'E';
     printf("我执行了\n");
}

// 以后只要看到函数的参数是一个数组, 那么就是地址传递
// 在函数中修改形参的值会影响到参数
void change3(char values[])
{
    values[0] = 'Q';
     printf("我执行了\n");
}

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

// 数组作为函数的参数传递, 修改形参的值会影响到实参
void change(int nums[])
{
    nums[0] = 998;
    printf("我执行了\n");
}
上一篇下一篇

猜你喜欢

热点阅读