zoukankan      html  css  js  c++  java
  • c语言,指针与数组--指针与二维数组2

    指向一维数组的指针   char (*p)[10] ;
    指向一维数组的指针类型 typedef  char(*TYPE_P2ARRAY)[10]  ;   
    该指针可以指向数组 ,且使用起来效果节本相同,但指针与数组并不等价。{sizeof结果不同  , 且该指针还可以指向除此之外其他类型的数据。 }

    #include <stdio.h>
    
    typedef int (*TP_PARRY1)[3] ;
    
    #define Uart_Printf printf
    void f1(void)
    {
        int a[2][3] = { {0,1,2},{10,11,12}};
    // a :  二维数组名 , equal : 指向一维数组{0,1,2}的指针
        TP_PARRY1 p = a;
        int (*q)[3] = a; 
        
        //int (*t)[2] = a;//warning: initialization from incompatible pointer type
        //int** x = a; // CRITICAL ERROR, may lead to Segmentation fault. NO space for PTRs.
        
    //指针结合律:1 (*q)括号最高优先级,表示q是一个指针。
    //                     2  向右 [] , 表示指向一个数组
    //                     3 右边没有了,向左,表示该数组的元素是int型。
        Uart_Printf("a00:%d
    ",a[0][0]);
        Uart_Printf("a01:%d
    ",a[0][1]);
        Uart_Printf("a02:%d
    ",a[0][2]);
        Uart_Printf("a10:%d
    ",a[1][0]);
        Uart_Printf("a11:%d
    ",a[1][1]);
        Uart_Printf("a12:%d
    ",a[1][2]);
        Uart_Printf("p00:%d
    ",a[0][0]);
        Uart_Printf("p01:%d
    ",a[0][1]);
        Uart_Printf("p02:%d
    ",a[0][2]);
        Uart_Printf("p10:%d
    ",a[1][0]);
        Uart_Printf("p11:%d
    ",a[1][1]);
        Uart_Printf("p12:%d
    ",a[1][2]);
       
        Uart_Printf("q00:%d
    ",a[0][0]);
        Uart_Printf("q01:%d
    ",a[0][1]);
        Uart_Printf("q02:%d
    ",a[0][2]);
        Uart_Printf("q10:%d
    ",a[1][0]);
        Uart_Printf("q11:%d
    ",a[1][1]);
        Uart_Printf("q12:%d
    ",a[1][2]);
        
        #if 0 
        //Segmentation fault
        Uart_Printf("x00:%d
    ",x[0][0]);
        Uart_Printf("x01:%d
    ",x[0][1]);
        Uart_Printf("x02:%d
    ",x[0][2]);
        Uart_Printf("x10:%d
    ",x[1][0]);
        Uart_Printf("x11:%d
    ",x[1][1]);
        Uart_Printf("x12:%d
    ",x[1][2]);
        #endif
    
    }
    
    int main()
    {
        f1();
    }
    /*
    root@oucaijun:/work/dcc# gcc *.c; ./a.out
    a00:0
    a01:1
    a02:2
    a10:10
    a11:11
    a12:12
    p00:0
    p01:1
    p02:2
    p10:10
    p11:11
    p12:12
    q00:0
    q01:1
    q02:2
    q10:10
    q11:11
    q12:12
    */
    

      

    二维数组(数组名与地址的关系)

    先定义一个二维数组array以及指向它的指针p_array:

    char array[3][1000] ;

    typedef char CHAR_ARRY2[3][1000] ;  
    typedef CHAR_ARRY2* PCHAR_ARRY2 ;
    PCHAR_ARRY2 p_array= &array;
     
     
    十进制绝对地址
    指向元素 指向一维数组
    指向一维数组
    指向一维数组
    指向二维数组
    十六进制地址
    872369208 array[0]
    &array[0]
    array
    p_array[0]
    p_array
    33FF4C38
    872369209
    array[0]+1
     
     
     
     
    33FF4C39
    .
    .
    .
    .
     
     
     
     
     
     
     
     
     
    872370208
     
    &array[0]+1
    array+1
    p_array[0]+1
     
    33FF5020
    .
    .
    .
     
     
     
     
     
     
    872372208
     
     
     
     
    p_array+1
    33FF57F0
    array ==&array[0]

     

  • 相关阅读:
    IE(IE6/IE7/IE8)支持HTML5标签
    JSP获取header信息request列表
    【转】log4j 不同的模块 不同的级别 记录日志
    congo.aspx和congo.cs和ViewCart.aspx
    Cookie Code
    web打印
    将一个对象转化为字符串形式的默认方法
    察看页面时禁止所有键盘上的键
    控制台程序添加引用
    Response.Write Script
  • 原文地址:https://www.cnblogs.com/mylinux/p/4666816.html
Copyright © 2011-2022 走看看