面试题:二级指针

#include <iostream>int main()
{int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };int(*p)[4] = a;//std::cout << *(p + 1) << std::endl;std::cout << (sizeof(*(p+1))) << std::endl;std::cout << (**(p + 1)) << std::endl;std::cout << (**p + 1) << std::endl;return 0;
}

结果:

16
4
1
详细分析——int (*p)[4];

这种定义方式经常与二维数组联用

解释定义

int (*p)[4];表示p是一个指针变量,指向一个存放4个整型元素的一维数组,且p+1(或p-1)是向前(或向后)移动数组长度个字节的大小。其中,指针变量指向一维数组的指针变量,指向二维数组中的某一行。
而第一种方式的p+1(或p-1)是向前(或向后)移动int个字节的大小。

该方式在与二维数组的联用

设有如下二维数组:

int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}
};
int (*p)[4] = a;

利用指向由4(二维数组列数)个元素组成的一维数组的指针变量引用二维数组

当执行 p = a 时,内存存储情况变为:

当 p ++ 时:

即 此时p[0][0] 的值等于a[1][0]的值为5.

注:(*(a + i) + j)等价于 *(a[i] + j) 等价于a[i][j]*。
例如:(*(a + 1) + 2) =  *(a[1] + 2) = a[1][2]若:int (*p)[4];p = a;则:(*(p + 1) + 2) =  *(p[1] + 2) = p[1][2]

参考:
https://blog.csdn.net/qq_41519304/article/details/105907427

分析int(*p)[4] = a相关推荐

  1. (46)分析 INT 0x2E 和 sysenter

    一.回顾 上次课我们学习了3环进0环的两种方式,分别是中断门和快速调用,如果CPU支持快速调用,那么_KUSER_SHARED_DATA 结构体的 SystemCall 属性指向的函数是 KiFast ...

  2. AJPFX分析int 和integer的区别

    int是java提供的8种原始数据类型之一. Java为每个原始类型提供了封装类,Integer是java为int提供的封装类. int的默认值为0,而Integer的默认值为null,即Intege ...

  3. java byte转int原理_java中int与byte数组互转代码详细分析

    在java中,可能会遇到将int转成byte[]数组,或者将byte[]数组转成int的情况.下面我们来思考下怎么实现? 首先,分析int在java内存中的存储格式. 众所周知,int类型在内存中占4 ...

  4. c 初始化char**_CC++|指针详述及实例分析

    指针是C语言中的精华,也是一把双刃剑,关系到安全和效率. 1 系统内存布局 2 存储变量的内存地址 3 指针定义:变量,地址,类型(宽度) 4 指针声明 5 &与*运算符 6 定义指针与解引用 ...

  5. 模块加载过程代码分析1

    一.概述 模块是作为ELF对象文件存放在文件系统中的,并通过执行insmod程序链接到内核中.对于每个模块,系统都要分配一个包含以下数据结构的内存区. 一个module对象,表示模块名的一个以null ...

  6. 【Binder 机制】Native 层 Binder 机制分析 ( service_manager.c | 开启 Binder | 注册 Binder 进程上下文 | 开启 Binder 循环 )

    文章目录 一.系统服务 二.系统服务主函数 三.开启 Binder 四.注册上下文 五.开启 Binder 循环 六.binder_write 方法 七.binder_ioctl 内核方法 八.bin ...

  7. 【网络安全】简要分析下Chrome-V8-Issue-762874

    这是A guided tour through Chrome's javascript compiler上的第二个漏洞,下面是对应的commit 环境搭建 用v8-action env:PATCH_F ...

  8. 一个简单函数的反汇编分析

    利用visual studio的反汇编功能,可以看到函数调用的汇编语言. 一个简单函数的反汇编分析 int __stdcall add(int a, int b, int c) { 00FD13C0  ...

  9. redis源码分析 ppt_Redis源码分析之客户端+数据库

    客户端 数据结构 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 ...

最新文章

  1. c语言文件操作中换行,关于文件操作,碰到空格就换行
  2. 前台页面验证中需要注意的一个与VARCHAR2(N BYTE)和VARCHAR2(N CHAR)的小细节
  3. “机器换人”没什么可抱怨
  4. Hibernate里自定义UserType时取不到值的问题
  5. muduo网络库学习(二)对套接字和监听事件的封装Channel
  6. 去苹果浏览器默认样式
  7. 如何恢复右键里新建记事本
  8. 启航龙图计算机网络,2020年哈尔滨工业大学854计算机基础考研大纲
  9. 获取路径传过来的地址 截取参数
  10. 安装CentOS7虚拟机
  11. Ubuntu下TP5隐藏入口文件
  12. 13、Math类简介
  13. eclipse使用教程(图文)
  14. 深度 | 蚂蚁金服DASFAA论文带你深入了解GBDT模型
  15. 茅台抢购脚本golang版本使用教程
  16. CreateCompatibleDC 和 CreateCompatibleBitmap
  17. android 如何获得附近的wifi,Android细节:扫描获取附近wifi,并以列表形式进行展示...
  18. MATLAB二维图形绘制
  19. 魔坊APP项目-19-种植园,我的背包、道具购买
  20. 嵌入式软件机器编程为啥选择梯形图作为编程语言?

热门文章

  1. 10php1c,良心点评解析追觅v10和小米1c哪个好?有什么区别实情爆料细节
  2. Flash、HTML和Unity开发网页游戏的现实比较
  3. 关于Flash3D和Unity 3D
  4. vue是用a标签打开新页面_vue 在新窗口打开页面并设置不同的背景
  5. a标签新窗口打开页面跳转sessionStorage丢失
  6. 西门子PLC的符号表
  7. 72家品牌上榜,联诚发“LCF”获评第十九届深圳知名品牌!
  8. gstreamer 代码实现
  9. Python基础--通用序列操作
  10. easyui获取图片路径_在线计算图片热点植入位置的方法与流程