zoukankan      html  css  js  c++  java
  • C语言数组指针和指针数组

    首先确定优先级:()>[]>*,另外数组指针,类比整型指针,表示指向数组的指针;指针数组,类比整型数组,表示元素为指针的数组。

    数组指针

    int (*p)[n] 首先()优先级高,它是一个指针,指向一个整型数组。n为数组的长度,当p+1时需要跨越n个整型数据的长度,通常用来表示二维数组及二维数组的函数传参。

    //数组指针
    int array_pointer()
    {
        int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
        int i, j;
        int (*p)[4] = a;  //记住这种定义格式
        for (i=0; i<3; ++i)
        {
            for (j=0; j<4; ++j)
            {
                printf("%-2dx20", *(*(p+i)+j));  /*%-2d中, '-'表示左对齐, 如果不写'-'则默认表示右对齐;2表示这个元素输出时占两个空格的空间*/
            }
            printf("
    ");
        }
        return 0;
    
    }
    //数组指针传参
    int test(int (*p)[4])
    {
        int i, j;    
        for (i=0; i<3; ++i)
        {
            for (j=0; j<4; ++j)
            {
                printf("%-2dx20", *(*(p+i)+j));  /*%-2d中, '-'表示左对齐, 如果不写'-'则默认表示右对齐;2表示这个元素输出时占两个空格的空间*/
            }
            printf("
    ");
        }
        return 0;
    
    }
    
    
    int main ()
    {
        int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
        test(a);
        return 0;  
    }

    指针数组

     int *p[n] 首先[]优先级高,它是一个数组,前面为int*,表示数组的元素为整型指针,也可表示为int **p, 这里执行p+1时,则p指向下一个数组元素,这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量,可以用来存放变量地址。

    //指针数组
    int pointer_array()
    {
        const char *names[] = {
                       "Zara Ali",
                       "Hina Ali",
                       "Nuha Ali",
                       "Sara Ali",
       };
       int i = 0;
     
       printf("names addr=%p
    ",names);
       for ( i = 0; i < MAX; i++)
       {
          printf("Value of names[%d] = %s  addr = %p 
    ", i, names[i],(names+i));
       }
       return 0;
    }
    int a = 1;
    int b = 2;
    int *p[2];
    p[0] = &a;
    p[1] = &b;
    
    printf("%p
    ", p[0]); //a的地址
    printf("%p
    ", &a); //a的地址
    printf("%p
    ", p[1]); //b的地址
    printf("%p
    ", &b); //b的地址
    printf("%d
    ", *p[0]); //p[0]表示a的地址,则*p[0]表示a的值
    printf("%d
    ", *p[1]); //p[1]表示b的地址,则*p[1]表示b的值
    
    
    //将二维数组赋给指针数组
    int *pp[3]; //一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2],所以要分别赋值
    int c[3][4];
    for (int i = 0; i < 3; i++)
        pp[i] = c[i];
  • 相关阅读:
    获取远程服务器的资源情况
    【Hibernate】Hibernate系列8之管理session
    【Hibernate】Hibernate系列7之二级缓存
    【Hibernate】Hibernate系列6之HQL查询
    【Hibernate】Hibernate系列5之检索策略
    【Hibernate】Hibernate系列4之配置文件详解
    【Hibernate】Hibernate系列3之配置文件详解
    【Hibernate】Hibernate系列2之Session详解
    【Hibernate】Hibernate系列1之概述
    【云计算】Dockerfile、镜像、容器快速入门
  • 原文地址:https://www.cnblogs.com/z3286586/p/13227260.html
Copyright © 2011-2022 走看看