数组指针、函数指针
发布日期:2021-06-29 04:56:31 浏览次数:2 分类:技术文章

本文共 1399 字,大约阅读时间需要 4 分钟。

一、举两个例子说明数组指针的问题:

(1)比如b[3]={1,2,3};其中&b是指向整个数组的类型即b[][3],(有的人可能会搞错这里,数组名b到底和不和指针变量一样,也分配了内存给它呢?答案是否定的。数组名没有给它分配内存,数组只会分配三个整型的内存。而我们这里出现了的b,只不过是编译器的事情,b代表了数组的首地址,它某种意义上和数值常量10没有区别)而b是指向b[0]的地址,它等价于&b[0];但是注意sizeof(b)的话,得到的却是整个数组的大小,而且sizeof(&b)也是整个数组的大小。

(2)比如a[3][3]的话,按照类推,从大到小的方法,&a是指向整个数组的类型即a[][3][3],而a则是a[][3]类型的地址,它等价于&a[0];而a[0]是指向a[0][0]的地址,它等价于&a[0][0];但是注意sizeof(a)的话得到的是整个数组的大小,36个字节,而且sizeof(&a)也是整个数组的大小。但是注意sizeof(a[0])的话,得到的是整个一行数组的大小,12个字节,而sizeof(&a[0])却得到4个字节。

在定义数组指针时,我们可以这样,int (*p)[3]=a或者&b,都是相同的类型的,这个要记住。

二、函数指针:

        与其他类型定义是一样的,函数指针指的是该指针指向函数的入口地址处,不同函数有不同类型,根据返回值类型和形参值来判断的。

int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */

例如char* const *(*next)(),就是说该函数指针形参值为空,而该函数返回一个指针,该指针指向一个类型为char的只读指针。

int main(){    int apricot[2][3][5]={
{
{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}}, {
{16,17,18,19,20},{21,22,23,24,25},{26,27,28,29,30}}};//下面指针的维数是不同的,从大到小 int (*r)[3][5]=apricot; int (*t)[5]=apricot[0]; int *s=apricot[0][0]; int u=apricot[0][0][0]; printf("%x\n",***r); printf("%x\n",**t); printf("%x\n",*s); printf("%x\n",***(r+1)); printf("%x\n",**(t+1)); printf("%x\n",*s+1); return 0;}

3、数组和指针参数(摘自C专家编程p225)

“数组名被改写成一个指针参数”规则并不是递归定义。数组的数组会被改写为“数组的指针”,而不是“指针的指针”。

实参                                                   所匹配的形式

数组的数组 char c[8][10];                char(*)[10] 数组指针

指针数组   char *c[15]                     char**c;  指针的指针

数组指针(行指针)char(*c)[64]  char (*c)[64] 不改变

指针的指针 char**c                         char**c

转载地址:https://blog.csdn.net/zhang_yin_liang/article/details/52015684 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:嵌入式系统基本知识
下一篇:关键字volatile有什么含意 并给出三个不同的例子

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月30日 12时36分23秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Atitit if else 选择决策流程ast对比 sql java 表达式类型 binaryExpression hase left and rit expr 目录 1.1. Sql 1 2019-04-29
Atitit 数据库存储引擎 目录 1.1. BLACKHOLE 黑洞引擎 1 1.2. Myisam innodb 1 1.3. Archive 档案类 1 1.4. Fed 连接引擎 2 1. 2019-04-29
Atitit sql注入的防范 目录 1.1. 检查数据类型 1 2. 有限操作DML 1 2.1. 限制执行函数黑名单机制 2 2.2. 限制执行系统sp 2 2.3. 限制数据查询语句类型,只能 2019-04-29
Atitit 自然语言与人工语言的语法构建ast的异同点 目录 1. 语言节点gaishu。。 2 1.1. 节点、函数数量大约200个 2 1.2. 关键词节点 是 有 的 3 1.3. 标识符 2019-04-29
Atitit 效率提升法细则 v3 t028.docx Atitit 提升效率细则 目录 1. 目标 2 1.1. 配置化增加扩展性 尽可能消除编译 方便增加 调整业务逻辑 2 1.2. 统一接口 2019-04-29
Atitit 工程师程序员技术级别对应表与主要特征 P1--p6 说明 类别 职称 对应技术标志 P5 高级工程师 工程师类 一般四五年 P6 资深开发 工程师类 78年经历 P7 P7 2019-04-29
Atitit btree 搜索原理 目录 第一节 左边小右边大 的有序树 1 第二节 平衡算法 1 第三节 层次高度一般3--4层 3 第四节 类似索引 3 第二章 Ref 5 第一节 左边小右 2019-04-29
Atitit保证架构超前性 前瞻性 目录 第一章 为什么需要修改代码 1 第一节 业务增加功能 1 第二节 增加字段 1 第三节 增加表数据需要查询 修改 1 第四节 类库升级 1 第二章 简单抽象 2019-04-29
Atitit 存储与数据库性能调优流程目录1. 数据库出现性能瓶颈,对外表现有几个方面: 2019-04-29
Atitit 为什么oracle这类大型数据库比mysql的性能机制目录1. 分区机制差别 11.1. Join算 2019-04-29
Atitit 数据库核心技术index索引技术 btree hash lsm fulltxt目录1.1. HASH 2019-04-29
Atitit 存储引擎核心技术 总结目录1. 表的存储有三个文件:结构+数据+索引 12. 页式管理 2019-04-29
Atitit 未来数据库新特性展望目录1. 统一的翻页 21.1. 2 Easy Top-N 2019-04-29
paip.tree 生成目录树到txt后的折叠查看 2019-04-29
Attit 现代编程语言重要特性目录第一章 类型系统 基本三大类型 2第一节 字符串 数字 bool 2第二节 推断局部变量 2第三节 动态类型 2第二章 可读性与开发效率 简单性 2 2019-04-29
Atitit glb 3tie city lst 三线城市列表 数据目录1. 全球范围内约90个城市 三线 12. 世界性三线城市全球共 2019-04-29
Atitit glb 1tie 2tie city lst 一二线城市列表数据约50个一线城市Alpha ++ 阿尔法++,,London 伦敦,,New York 纽约,,Alpha + 2019-04-29
Atitit fms Strait (海峡) lst 数据列表目录1. 4大洋 12. 著名的海大约40个,总共约55个海 13. 海区列表 23.1. 、波利尼西亚(Polynesia, 2019-04-29
Atitit Major island groups and archipelagos 主要的岛群和群岛目录资料目录1. 岛群 波利尼西亚(Polynesia, 美拉尼西亚(Melanesia, 2019-04-29
Atitit trave islands list 旅游资源列表岛屿目录1. 东南亚著名的旅游岛屿 21.1. Cjkv 日韩 冲绳 琉球 济州岛 北海道 21.2. 中国 涠洲岛 南澳 2019-04-29