zoukankan      html  css  js  c++  java
  • 关于int *a[常量]与int (*a)[常量]的分析与区分(详解)

    前言:

    小伙伴私信我说,int *a[常量]与int (*a)[常量]这个区分不开,C指针,确实是C中最难的部分,也是学C++,JAVA,包括你以后上岗用的非常频繁的东西,在这里我就简单论述一下吧,具体关于指针的讲解见详文http://www.cnblogs.com/ECJTUACM-873284962/p/6682949.html

    正文:

    1.int *a[常量] 定义一个数组,该数组的每个成员都是int* 指针
    2.int (*a)[常量] 定义一个指针, 该指针指向一个int数组!

    令常量为n

    对于int *型的指针,应该很好理解吧,相当于数组a可以装载n个int类型的指针。

    而int (*a)[n]  数组的指针表示指针a指向数组int [n];

    如果你还是感觉到有些疑惑的话,看下一下代码,先分析结果,再将代码粘贴后运行,看看效果,估计就没有什么太大的问题了!

    下面给出样例代码:

     1 #include <stdio.h>
     2 int main()
     3 {
     4     static int m[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};/* 定义二维数组m并初始化*/
     5     int (*p)[4];//数组指针 p是指针,指向一维数组,每个一维数组有4个int元素
     6     int i,j; int *q[3];//指针数组 q是数组,数组元素是指针,3个int指针
     7     p=m; //p是指针,可以直接指向二维数组
     8     printf("数组指针输出元素
    ");
     9     for(i=0;i<3;i++)/*输出二维数组中各个元素的数值*/
    10     {
    11         for(j=0;j<4;j++)
    12         {
    13             printf("%3d ",*(*(p+i)+j));
    14         }
    15         printf("
    ");
    16     }
    17     printf("
    ");
    18     for(i=0;i<3;i++,p++)//p可看成是行指针
    19     {
    20         printf("%3d ",**p);//每一行的第一个元素
    21         printf("%3d ",*(*p+1));//每一行的第二个元素
    22         printf("%3d ",*(*p+2));//每一行的第三个元素
    23         printf("%3d ",*(*p+3));//每一行的第四个元素
    24         printf("
    ");
    25     }
    26     printf("
    ");
    27     printf("指针数组输出元素
    ");
    28     for(i=0;i<3;i++)
    29         q[i]=m[i];//q是数组,元素q[i]是指针
    30     for(i=0;i<3;i++)
    31     {
    32         for(j=0;j<4;j++)
    33         {
    34             printf("%3d ",q[i][j]);//q[i][j]可换成*(q[i]+j)
    35         }
    36         printf("
    ");
    37     }
    38     printf("
    ");
    39     q[0]=m[0];
    40     for(i=0;i<3;i++)
    41     {
    42         for(j=0;j<4;j++)
    43         {
    44             printf("%3d ",*(q[0]+j+4*i));
    45         }
    46         printf("
    ");
    47     }
    48     printf("
    ");
    49 }
  • 相关阅读:
    Go并发
    frida打印class的信息--java反射
    Go嵌入类型
    Go方法集-应该传值类型还是指针类型?
    springboot使用unidbg遇到logback和sl4j依赖冲突,正确配置文件
    Eureka 微服务注册发现开源框架
    呼吸机CPAP与APAP:哪个更好?
    如何看睡眠监测报告
    抓包工具 tcpdump 用法说明
    利用ROS的samba功能实现centos定期备份ROS配置
  • 原文地址:https://www.cnblogs.com/ECJTUACM-873284962/p/6759391.html
Copyright © 2011-2022 走看看