c语言数组(待完善)

内容概要

  一、定义数组

  二、数组初始化

  三、对于数组的理解

  四、二维数组

 

1、定义数组

#include <stdio.h>

int main(){
    int array[5]; //定义一个整形数组
    
    return 0;
}

  数组的定义与普通变量的定义类似,只是多了后面的中括号和数量

 

2、数组初始化

  和变量的使用类似,数组也可以只定义,或者在定义时就初始化

#include <stdio.h>

int main(){
    int array[5] = {1,2,3,4,5}
    return 0;
}

 

  如果在定义数组时便初始化,中括号内可以不填数字;但如果没有初始化就必须填数字

    这样会报错

#include <stdio.h>

int main(){
    int array[];
    return 0;
}

    这样就不会报错

#include <stdio.h>

int main(){
    int array[] = {1,2,4,5,6};
    return 0;
}

 

  不对等的初始化

#include <stdio.h>

int main(){
    int array[10] = {1};
    
    for (int i=0; i<10; i++){
        printf("%d\n",array[i]); //第一个元素为1,其它全部默认初始化为0
    }
    return 0;
}

  

  如果没有初始化,便尝试遍历数组

#include <stdio.h>

int main(){
    int array[10];
    
    for (int i=0; i<10; i++){
        printf("%d\n",array[i]); //发现数组中会存有一些随机默认值
    }
    return 0;
}

 

3、对数组的一些理解

  c语言中是没有字符串类型的,而c语言实现字符串是通过字符数组实现的(这样的理解可能有问题)

#include <stdio.h>

int main(){
    char str[] = {'h','e','l','l','o','\0'};
    
    printf("%s\n",str);
    
    return 0;
}

 

   \0是字符串结束的标识。str数组存储首字符h的内存地址,这样字符串开始的字符就确定了,系统printf时,则要知道字符串何时结束,所以约定\0是字符串结束的标识

  不加\0会出现问题

#include <stdio.h>

int main(){
    char str[] = {'h','e','l','l','o'};
    char str2[] = {'y','e','s'};
    printf("%s\n",str);
    printf("%s\n",str2);
    
    return 0;
}

 

  我将char str[] = "hello world";的语法看作字符数组的语法糖(这样定义字符串时,编译器自动在hello world后面加入\0)

#include <stdio.h>
#include <string.h>

int main(){
    char str[] = "hello world";
    printf("%s\n",str);
    
    printf("%d\n",sizeof(str));  // 12
    
    printf("%d\n",strlen(str));  // 11
    return 0;
}

 

  c语言数据要关注:是值还是内存地址,数据的长度是多少(多少个字节),编译器是否知道数据的长度

  数据的跨度要保持一致,这样编译器才能按照规定的跨度读取下一个元素,这就导致了数组存储的数据类型必须一致

 

  验证数组中的相邻元素之间的内存地址等于数据类型的字节长度

#include <stdio.h>

int main(){
    int array[5] = {1,2,3,4,5};
    int i;
    
    for (i=0; i<5; i++){
        printf("%d address is %p\n",i,&array[i]);
        
    }
    
    return 0;
}

 

  验证数组赋值

#include <stdio.h>

int main(){
    char str[] = "hello world";
    
    str = "isadmire";  //程序报错了
    
    return 0;
}

 

4、二维数组

  -定义二维数组

#include <stdio.h>

int main(){
    
    int array[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
    int i,j;
    
    //遍历二维数组
    for (i=0; i<3; i++){
        for (j=0; j<4; j++){
            printf("%d\n",array[i][j]);
        }
    }
    
    return 0;
}

 

  -让二维数组初始化更清晰(是大括号,而不是小括号)

#include <stdio.h>

int main(){
    
    int array[3][4] = {
        {0,1,2,3},
        {4,5,6,7},
        {8,9,10,11},
    };
    
    int i,j;
    
    // b
    for (i=0; i<3; i++){
        for (j=0; j<4; j++){
            printf("%d\n",array[i][j]);
        }
    }
    
    return 0;
}

 

  -全部初始化为0

#include <stdio.h>

int main(){
    
    int array[3][4] = {0};

    int i,j;
    
    // b
    for (i=0; i<3; i++){
        for (j=0; j<4; j++){
            printf("%d\n",array[i][j]);
        }
    }
    
    return 0;
}

 

  -如果在定义时就初始化,第一个括号内可以不填参数,但是第二个空格必须加入参数

#include <stdio.h>

int main(){
    
    int array[][4] = {
        {0,1,2,3},
        {4,5,6,7},
        {8,9,10,11},
    };
    
    int i,j;
    
    // b
    for (i=0; i<3; i++){
        for (j=0; j<4; j++){
            printf("%d\n",array[i][j]);
        }
    }
    
    return 0;
}

 

  二维数组其实是一维数组的线上扩展

***待完善***

 

posted @ 2021-03-11 23:39  口乞厂几  阅读(204)  评论(0)    收藏  举报