zoukankan      html  css  js  c++  java
  • 二级指针与二维数组的秘密【二者不等】

    View Code
    第一种情况
    
    char buf[10][5];         //可以解析为有10行字符串 每行5个字节
    char (*p)[5] = buf;         //数组的指针p指向数组[5]   指针++ 跨度为5字节
    char **tp = (char**)buf; //二级指针tp指向数组[10][5] 指针++ 跨度也就是10X5 = 50个字节
    
    //对第一行进行赋值
    strcpy(buf[0],"abc");   
    strcpy(p[1],"123");
    
    //三者地址一样
    printf("%s %s \n",buf[0],buf[1]);     //成功打印 解析度为一行 buf[1]一样有效
    printf("%s %s \n",p[0],p[1]);       //成功打印 解析度为一行 p[1]一样有效
    printf("%s",tp[0]);                //报错,解析度为整个数组,tp[1]会打印出未知的地址,错误的语法。
    
    
    第二种情况
    
    int fun(char**tp,char(*op)[5],char p[][5])
    {
        //三者地址都一样,前两者等价
        printf("%s \n",p[0]);          //成功打印 解析度为一行 p[1]一样有效
        printf("%s \n",op[0]);         //成功打印 解析度为一行 op[1]一样有效
        printf("%s",tp[0]);            //报错,解析度为整个数组,tp[1]会打印出未知的地址,错误的语法。
        return 0;
    }
    
    int main()
    {
        char buf[10][5];         //解析为有10行字符串 每行5个字节
        //对第一行进行赋值
        strcpy(buf[0],"abc");   
        fun((char**)buf,buf,buf);
        return 0;
    }
  • 相关阅读:
    51nod 1179 最大的最大公约数 (数论)
    POJ 3685 二分套二分
    POJ 3045 贪心
    LIC
    HDU 1029 Ignatius and the Princess IV
    HDU 1024 Max Sum Plus Plus
    HDU 2389 Rain on your Parade
    HDU 2819 Swap
    HDU 1281 棋盘游戏
    HDU 1083 Courses
  • 原文地址:https://www.cnblogs.com/guyan/p/2311436.html
Copyright © 2011-2022 走看看