关于指针的面试题,指向字符串和字符数组的单指针,二级指针,三级指针的使用。

2023-11-04

int a[3][4] = { 0 };
	printf("%d\n", sizeof(a));//48
	printf("%d\n", sizeof(a[0][0]));//4
	printf("%d\n", sizeof(a[0]));//16
	printf("%d\n", sizeof(a[0] + 1));//4 地址
	printf("%d\n", sizeof(*(a[0] + 1)));//4 int
	printf("%d\n", sizeof(a + 1));//地址
	printf("%d\n", sizeof(*(a + 1)));//a[1]16
	printf("%d\n", sizeof(&a[0] + 1));//4 &a[0]][1]
	printf("%d\n", sizeof(*(&a[0] + 1)));// a[0][1] 16 对第二行解引用
	printf("%d\n", sizeof(*a));//16 a[0]
	printf("%d\n", sizeof(a[3]));//16

int a[5] = { 1, 2, 3, 4, 5 };
	int *ptr = (int *)(&a + 1);//跳到整个数组后面去的地址
	printf("%d,%d", *(a + 1), *(ptr - 1));//2  5

int a = 6;
	int *p = &a;
	printf("%p\n", p);
	printf("%p\n", p+0x1);//p的基类型是int +1 就是加一个int所占的字节空间
	printf("%p\n", (unsigned long)p+0x1);//转成整数+1
	printf("%p\n", (short *)p+0x1);//short 占两个字节加两个字节

 

const char *c[] = { "ENTER","NEW","POINT","FIRST" };
	const char**cp[] = { (c + 3),c + 2,c + 1,c };
	const char***cpp = cp;
	printf("%s\n", **++cpp);
	printf("%s\n", *--*++cpp + 3);
	printf("%s\n", *cpp[-2] + 3);
	printf("%s\n", cpp[-1][-1] + 1);//*(*(cpp-1)-1)+1

 

 这道题应该注意的是对指针cpp的操作应该区别

*cpp++  先执行解引用操作,待所有操作完成后,要执行下一行的时候,cpp的值才会改变。

++cpp 先执行++操作变量的值发生变化

cpp+1 只对指针的执行改变,变量的值并不会发生变化。

const char *a[] = { "work","at","alibaba" };
	const char**pa = a;
	pa++;
	printf("%s\n", *pa);//at 

 

int a[3][2] = { (0, 1), (2, 3), (4, 5) };//{1,3,5,0,0,0}
	int *p;
	p = a[0];
	printf("%d", p[0]);//1
int a[4] = { 1, 2, 3, 4 };
	int *ptr1 = (int *)(&a + 1);
	int *ptr2 = (int *)((int)a + 1);
	printf("%x,%x\n", ptr1[-1], *ptr2);//4,2000000
	printf("%p",a);
	//在内存中1的存法是 00000001 00000000 00000000 00000000
	//2                 00000010 00000000 00000000 00000000
	//(int)a+1 就是整数+1,指针会后移一个字节,结合内存的小端存储方式应该读出的是
	//00000010 00000000 00000000 00000000 //%x 十六进制 2000000

 这道题涉及到了内存的存储方式,在一般的windows操作系统win32平台下,是小端字节序,即低位存到高地址上,读取也是从低位开始读。小端模式是颠倒书写顺序进行存储的

	const char *str[] = { "welcome","to","fortemedia","nanjing" };
	const char **p = str + 1;
	str[0] = (*p++) + 2;
	str[1] = *(p + 1);
	str[2] = p[1] + 3;
	str[3] = p[0] + (str[2] - str[1]);
	printf("%s\n", str[0]);
	printf("%s\n", str[1]);
	printf("%s\n", str[2]);
	printf("%s\n", str[3]);
	printf("%d\n", str[2] - str[1]);

这道题的坑在于 str[2] - str[1] 求的是 从str[]存储的位置开始到‘\0’结束。

 

 

 

对字符数组变量名的含义和用法不熟悉的朋友可以参见我的另几篇博客。

一维数组数组名含义解析,数组指针的使用

https://blog.csdn.net/weixin_43447989/article/details/90346271

一维数组传参、二维数组传参、一级指针传参、二级指针传参

  https://blog.csdn.net/weixin_43447989/article/details/90347625

(*( void (*) ( ) ) 0  ) ()的含义,二维数组数组名的含义和用法 *(*(a+i)+j)的含义,*(a+1)+3的含义,*(a+1+1)的含义https://blog.csdn.net/weixin_43447989/article/details/90380906

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于指针的面试题,指向字符串和字符数组的单指针,二级指针,三级指针的使用。 的相关文章

  • 谁能建议我一种在 C++ 中分割名称的简单方法

    我一直在尝试将名称分为名字和姓氏 但我确信我的实现就简单性而言并不是最好的 string name John Smith string first string last name name find getting lastname fo
  • 尚未注册类型“IServiceProviderFactory[Autofac.ContainerBuilder]”的服务

    当运行以下命令添加数据库迁移脚本时 出现以下错误 dotnet ef migrations add InitialCreate v o Migrations context MyContext 访问 Microsoft Extensions
  • 通过 SocketCAN 进行 boost::asio

    我正在考虑利用升压阿西奥 http www boost org doc libs 1 49 0 doc html boost asio html从a读取数据套接字CAN http en wikipedia org wiki SocketCA
  • 如何在 DataColumn.Expression 中使用 IF/ELSE 或 CASE?

    我有一个包含 1 列的表 状态 我想添加另一列名为 Action 的列 其值如下 如果 Status Yes 则 Action Go 否则 Action Stop 我使用以下代码添加到 操作 列中 但它不起作用 myDataTable Co
  • 如何保证对象只有一个线程

    我有以下代码 class Service public void start creates thread which creates window and goes to message loop void stop sends WM C
  • 何时使用 =default 使析构函数默认?

    尽管对构造函数使用 default 对我来说很清楚 即强制编译器在其他构造函数存在时创建默认构造函数 但我仍然无法理解这两种类型的析构函数之间的区别 那些使用 default 的 那些没有显式定义并由编译器自动生成的 我唯一想到的是 gro
  • 使用 Enumerable.OfType() 或 LINQ 查找特定类型的所有子控件

    Existed MyControl1 Controls OfType
  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • 平滑滚动.net 表单

    您好 我正在 net 中使用表单 并且在运行时动态添加大量链接标签 我将这些链接标签添加到面板并将该面板添加到 winform 当链接标签的数量增加时 表单会显示一个自动滚动条 垂直 现在 当我使用自动滚动向下滚动时 表单在滚动时不会更新其
  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • 类的成员复制

    在学习 复制成员 概念时 书中给出了如下说法 此外 如果非静态成员是引用 const 或没有复制赋值的用户定义类型 则无法生成默认赋值 我不太明白这个声明到底想传达什么 或者说这个说法指的是哪一种场景 谢谢 该语句与编译器自动为您编写的类
  • 如何从文本文件读取整数到数组

    这就是我想做的 我对此有些不满 但我希望你能容忍我 这对我来说是一个非常新的概念 1 在我的程序中 我希望创建一个包含 50 个整数的数组来保存来自文件的数据 我的程序必须获取用户的文档文件夹的路径 2 文件的名称为 grades txt
  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • 如何在标准 WPF ListView 中启用 UI 虚拟化

    我正在使用 NET 4 5 VS2012 并且我有一个 ListView 看起来像这样
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • 是否有相当于 Clang/LLVM 的 .spec 文件,在哪里可以找到参考?

    The gcc驱动程序可以配置为使用特定的链接器 特定的选项和其他细节 例如覆盖系统头 specs files 当前 截至撰写本文时 GCC 版本 4 9 0 的手册此处描述了规范文件 https gcc gnu org onlinedoc
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959

随机推荐

  • Vue生成二维码

    文章目录 概要 整体架构流程 实现过程 创建vue VsCode打开项目 打开终端 下载qrcodejs2插件 导入和使用qrcodejs2 代码展示与讲解 概要 实现输入内容后点击回车或生成按钮 生成二维码 扫描后是我们在输入框的值 在上
  • 华为OD机试 - 找到比自己强的人数(Java)

    题目描述 给定数组 2 1 3 2 每组表示师徒关系 第一个元素是第二个元素的老师 数字代表排名 现在找出比自己强的徒弟 输入描述 无 输出描述 无 用例 输入 2 1 3 2 输出 0 1 2 说明 输入 第一行数据 2 1 表示排名第
  • 立刻更新你的苹果设备!苹果被曝2大安全漏洞,无需交互就能被植入间谍软件...

    萧箫 发自 凹非寺量子位 公众号 QbitAI 不要犹豫 立刻更新你的苹果设备 就在这两天 一家安全组织发现了苹果设备的2个最新漏洞 平板 手机 电脑等都受影响 例如搭载iOS 16 6版本的iPhone手机 以及新版本的iPad平板 Ma
  • b宝塔 centos端口更改_宝塔Linux面板添加安全入口,修改管理员默认用户名与端口...

    网站安全问题是件非常容易被忽视掉的事情 有些同学安装宝塔Linux面板之后管理员账号依旧使用的是admin 使用默认的账号密码很容易被入侵 因此猫总总结了使用宝塔面Linux板必须修改的三点 宝塔Windows面板用户同样需要注意安全问题
  • IDEA 下Java获取Tomcat 项目运行路径问题

    最近在学习SpringMVC的上传文件过程中 使session getServletContext getRealPath photo 获取项目运行路径 却发现获取得到的是 C Program Files Apache Software F
  • UBT11:ubuntu安装IDEA2020.1

    11 1 简介 linux上的IDEA并不需要安装 只要解压即可运行 这就好像win上面的绿色软件 所以 我们需要把idea解压到一个合适的位置 然后创建桌面快捷方式 即可完成安装 此方法应该适用于整个JetBrains的软件 11 2 环
  • mysql8 window安装,链式复制,双主复制,数据库的负载均衡

    by xuejianxinokok 163 com 2021年3月25日 周四 15 06 43 1 下载地址 https dev mysql com downloads mysql 2 下载文件名称为 mysql 8 0 23 winx6
  • 2022年“网络安全”赛项海南省赛选拔赛 任务书

    2022年 网络安全 赛项海南省赛选拔赛 任务书 一 竞赛时间 共计6小时 二 A模块基础设施设置 安全加固 350分 一 项目和任务描述 假定你是某企业的网络安全工程师 对于企业的服务器系统 根据任务要求确保各服务正常运行 并通过综合运用
  • Linux系统安装R语言

    R语言是一款开源 免费的用于绘图和统计分析的语言和集成环境 该语言使用起来十分方便 提供了许多扩展包供下载使用 目前网上一些linux安装R语言的教程太过繁琐 其实 在ubuntu linux 系统下利用其提供的apt get命令可以方便的
  • macbook pro 散热方案,温度仅29度

    结论 Macbook Pro 13 3 寸 2017 控制住温度 性能飞起 5年前散热不好时 容易触发 CPU 降频 一 需求 长时间满载运行不降频 控制住温度 控制住散热噪音 二 尝试过的散热方案 散热方案 说明 最低温度 满载温度 一
  • 华为云云耀云服务器L实例评测

    前言 在上篇文章 华为云云耀云服务器L实例评测 快速部署MySQL使用指南 中 我们已经用 华为云云耀云服务器L实例 在命令行窗口内完成了MySQL的部署并简单使用 但是后台有小伙伴跟我留言说 能不能用 华为云云耀云服务器L实例 来实现个简
  • 联盛德W800开发板

    目录 W800 芯片介绍 W800开发板 主要接口如下 1 概述 2 准备工作 3 SDK目录结构如下 4 W800编译固件编译 4 1 安装MSYS到本地 4 2增加国内软件更新源 编辑4 3下载工具链 4 5 make工具链配置 5 M
  • 浪潮服务器不显示光驱,电脑不从光驱启动怎么办?我是浪潮品牌的机子。

    在DOS下可以装系统的 WIN98启动软盘引导系统为例在DOS下安装XP 为提高安装速度 需要在启动盘中添加smartdrv exe磁盘高速缓存 cache 程序 并且在安装之前运行该程序 smartdrv是一个磁盘高速缓存程序 称之为sm
  • React事件处理方法

    一 注意事项 1 React元素的事件处理和Dom元素很相似 但是有一点语法的不同 2 React事件的命名采用小驼峰的命名方式 而不是纯小写 camelCase 3 使用JSX语法时你需要传入一个函数作为事件处理函数 而不是一个字符串 例
  • 【CVPR 2022 多模态融合(有3D检测)】Multimodal Token Fusion for Vision Transformers

    Multimodal Token Fusion for Vision Transformers 论文简介 具体实现 Alignment agnostic fusion Alignment aware fusion Multimodal To
  • 如何快速的只取出列表中的数字

    my list a a a 1 2 3 4 5 A B C 提取出 12345 方法一 使用try方法测试 isalnum 判断是否是字母 my list a a a 1 2 3 4 5 A B C str1 for i in my lis
  • Elasticsearch 在Windows上安装和启动

    1 安装JDK 至少1 8以上 2 下载和解压缩Elasticsearch安装包 下载地址 https www elastic co cn downloads 3 启动Elasticsearch bin elasticsearch bat
  • H5存储方案——cookie、session、SessionStorage和LocalStorage

    1 简述 浏览器端存储网页中的数据有三种存储方案 cookie SessionStorage和LocalStorage 其中 SessionStorage和LocalStorage是H5新增的存储方案 而cookie经常同session一并
  • 数据结构之链表详解(2)——双向链表

    目录 前言 一 双向链表 A 双向链表的含义 B 双向链表的实现 1 双向链表的结构 2 链表的初始化 初始化图解 函数代码 3 动态申请节点函数 函数代码 4 打印双向链表函数 函数代码 5 尾部插入节点 图解 函数代码 测试 6 头插函
  • 关于指针的面试题,指向字符串和字符数组的单指针,二级指针,三级指针的使用。

    int a 3 4 0 printf d n sizeof a 48 printf d n sizeof a 0 0 4 printf d n sizeof a 0 16 printf d n sizeof a 0 1 4 地址 print