美文网首页
指针与二维数组

指针与二维数组

作者: lxr_ | 来源:发表于2021-10-10 11:35 被阅读0次
    #include <stdio.h>
    
    int main(int argc, char** argv)
    {
        int array[2][3] = { 0 };  
    
        int k = 0;
    
        for (int i = 0; i < 2; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                array[i][j] = k++;
            }
        }
        printf("array:%p\n", array); //array:007DFBE4        
        // array为二维数组首地址,指向包含3个元素的一维数组首地址的指针,类型为int(*)[],与上一篇所讲的数组指针联系起来
        printf("&array:%p\n", &array); //&array:007DFBE4  与array相等,数组名就是数组地址,array类似于二级指针
        printf("array+1:%p\n", array + 1);  
        //array + 1:007DFBF0  array+1为第二行首地址,指向包含3个元素的一维数组指针
        //每次运行结果不同,可以看出,上面两者相差sizeof(int)*3=12个字节,即一行所占内存大小
                     
        printf("*(array+1):%p array[1]:%p &array[1][0]:%p\n", *(array + 1), array[1],&array[1][0]); 
        //*(array+1):00EFF9C4 array[1]:00EFF9C4 &array[1][0]:00EFF9C4
        //运行结果一样,把第二行看成一个一维数组,则array[1]可以看成该数组的数组名
        
        printf("**(array+1):%d\n", **(array + 1));  //**(array+1):3   第二行第一个元素
    
        printf("*(*(array+1)+2):%d array[1][2]:%d\n", *(*(array + 1) + 2),array[1][2]);//*(*(array+1)+2):5 array[1][2]:5 
                                                            //两者相等,所以*(array+1)指向第二行,再加2指向第二行第三个元素
    
        //**********数组指针和二维数组**************
        int(*p)[3] = array;  //array是指向一个含有3个元素的一维数组,而数组指针也是指向整个一维数组
    
        printf("*(*(p+1)+1):%d *(*(array+1)+1):%d array[1][1]:%d\n", *(*(p + 1)+1),*(*(array+1)+1),array[1][1]);
        //*(*(p+1)+1):4 *(*(array+1)+1):4 array[1][1]:4   一样的结果  p和array都相当于于二级指针
    
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:指针与二维数组

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