美文网首页
指针和数组,指针和二维数组、多维数组

指针和数组,指针和二维数组、多维数组

作者: KardelShaw | 来源:发表于2021-06-07 00:06 被阅读0次

    一维数组

    #define SIZE 100
    
    int scores[SIZE] = {0};
    
    int *p_scores = scores;
    
    

    二维数组

    #define ROWS 3
    #define COLS 4
    
    int sequence[ROWS][COLS] = {
      {0, 1, 2, 3},
      {4, 5, 6, 7},
      {8, 9, 10, 11}
    }
    
    int (*p_seq)[COLS] = sequence;    
    

    其实,p_seq可以指向任何列是COLS的二维数组。如

    int sequence_2[2][COLS] = { 
       {1, 2, 3, 4},
       {5, 6, 7, 8}
    };
    
    int sequence_3[100][COLS] = {
       {1, 2, 3, 4},
       ...
       ...
    };
    
    p_seq = sequence_2;    // 有效
    p_seq = sequence_3;    // 有效
    
    

    同时要注意*p_seq的括号不能省略,因为int (*p_seq)[COLS]int *p_seq[COLS] 的语义完全不同。

    根据C语言的语法规则,方括号[ ]的优先级比*高。什么优先级高,表明其本质是一个什么变量。

    1. 不加括号时,方括号优先级高,所以 int *p_seq[COLS] 本质上是一个变量名为p_seq的数组,它里面存储的全是指针变量如int *p1, *p2, *p3,而不是int。(可以把int *p_seq[COLS] 看作是int *(p_seq[COLS]),左边的int *视为整体,类比整型数组int seq[COLS]

    2. 加括号时,*p_seq优先级高,它本质是一个指针,指向一个内含COLSint元素的数组,即p_seq是一个指向数组的指针。

    多维数组

    可以以二维数组类推

    // 三维数组
    int array[2][3][4] = {
       //data
    };
    // 指向三维数组的指针
    int (*ptr)[3][4] = array;
    

    相关文章

      网友评论

          本文标题:指针和数组,指针和二维数组、多维数组

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