关于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[常量]与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("数组指针输出元素\n");
 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("\n");
16     }
17     printf("\n");
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("\n");
25     }
26     printf("\n");
27     printf("指针数组输出元素\n");
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("\n");
37     }
38     printf("\n");
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("\n");
47     }
48     printf("\n");
49 }

 

目录
相关文章
|
12月前
|
Java 编译器
【面试题精讲】int i=0;i=i++,从底层虚拟机角度分析答案
【面试题精讲】int i=0;i=i++,从底层虚拟机角度分析答案
|
机器学习/深度学习 SDN C语言
C/CPP中int和string的互相转换详解与多解例题分析
C标准库atoi, atof, atol, atoll(C++11标准) 函数,以及sprintf、sscanf函数,用sstream类,实现C++中int和string的互相转换
217 0
C/CPP中int和string的互相转换详解与多解例题分析
|
Java
Java基本数据类型与数组(定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数)案例分析
首先要知道java中的数组是线性排列的 其次要知道数组的初始标度为0
827 0
|
SQL 测试技术 数据库
关于Int自增字段和GUID字段的性能测试。只有测试,没有分析,呵呵
最近有两篇关于GUID和Int自增的文章,我是一直使用Int自增的,不习惯使用GUID,感觉GUID很麻烦,用着不方便,性能也比不上Int自增。但是同时我也知道,二者在性能上孰优孰劣,只是感觉和猜测,并没有做测试!我是只相信测试,不相信分析、推断的。
885 0
|
存储 缓存 安全
|
5月前
|
数据采集 分布式计算 数据处理
Dataphin常见问题之与指定类型int不兼容如何解决
Dataphin是阿里云提供的一站式数据处理服务,旨在帮助企业构建一体化的智能数据处理平台。Dataphin整合了数据建模、数据处理、数据开发、数据服务等多个功能,支持企业更高效地进行数据治理和分析。
|
5月前
|
SQL 流计算 OceanBase
OceanBase CDC从热OB库采集过来的Tinyint(1)类型会默认转换成Boolean,请教一下,如果想转换成int类型,有什方法么?
【2月更文挑战第25天】OceanBase CDC从热OB库采集过来的Tinyint(1)类型会默认转换成Boolean,请教一下,如果想转换成int类型,有什方法么?
120 3
|
2月前
|
Java
【Java基础面试五】、 int类型的数据范围是多少?
这篇文章回答了Java中`int`类型数据的范围是-2^31到2^31-1,并提供了其他基本数据类型的内存占用和数值范围信息。
【Java基础面试五】、 int类型的数据范围是多少?
|
2月前
|
自然语言处理 Go 数据安全/隐私保护
对 int 类型的数据加密,有哪些好的方案?
对 int 类型的数据加密,有哪些好的方案?
69 13
|
4月前
|
机器学习/深度学习 人工智能 分布式计算
人工智能平台PAI产品使用合集之int类型是否可以为raw feature
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。

热门文章

最新文章

下一篇
无影云桌面