指针笔试题讲解

文章目录

  • 题目
  • 答案与解析
    • 1、
    • 2
    • 3
    • 4、
    • 5、
    • 6、
    • 7、
    • 8、


题目

int main()
{int a[5] = { 1, 2, 3, 4, 5 };int *ptr = (int *)(&a + 1);printf( "%d,%d", *(a + 1), *(ptr - 1));return 0;
}
//由于还没学习结构体,这里告知结构体的大小是20个字节
//由于还没学习结构体,这里告知结构体的大小是20个字节
struct Test
{int Num;char* pcName;short sDate;char cha[2];short sBa[4];
}*p;
//假设p 的值为0x100000。 如下表表达式的值分别为多少?
//已知,结构体Test类型的变量大小是20个字节
int main()
{p = (struct Test*)0X100000;printf("%p\n", p + 0x1);//printf("%p\n", (unsigned long)p + 0x1);printf("%p\n", (unsigned int*)p + 0x1);return 0;
}
int main()
{int a[4] = { 1, 2, 3, 4 };int *ptr1 = (int *)(&a + 1);int *ptr2 = (int *)((int)a + 1);printf( "%x,%x", ptr1[-1], *ptr2);return 0;
}
int main()
{int a[3][2] = { (0, 1), (2, 3), (4, 5) };int *p;p = a[0];printf( "%d", p[0]);return 0;
}
int main()
{int a[5][5];int(*p)[4];p = a;printf( "%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);return 0;
}
int main()
{int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int *ptr1 = (int *)(&aa + 1);int *ptr2 = (int *)(*(aa + 1));printf( "%d,%d", *(ptr1 - 1), *(ptr2 - 1));return 0;
}
int main()
{char *a[] = {"work","at","alibaba"};char**pa = a;pa++;printf("%s\n", *pa);return 0;
}
int main()
{char *c[] = {"ENTER","NEW","POINT","FIRST"};char**cp[] = {c+3,c+2,c+1,c};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);return 0;
}

答案与解析

重点知识点:
数组名在大多数情况下表示数组首元素的地址,但是两种情况除外
(1)sizeof(数组名),这时表示整个数组的大小
(2)&数组名,这时表示整个数组的地址

1、

答案:
在这里插入图片描述

解析:

int main()
{int a[5] = { 1, 2, 3, 4, 5 };int* ptr = (int*)(&a + 1);//&a,取出的是整个数组的地址,加一,跳过整个数组的大小printf("%d,%d", *(a + 1), *(ptr - 1));//这里两个都是int*类型的指针,且都是普通的加减一,都只跳过4个字节return 0;
}

在这里插入图片描述

2

答案:

解析:

int main()
{p = (struct Test*)0X100000;//这里的p是结构体指针,加一跳过一个结构体大小的字节,跳过20个字节,由于是16进制,所以显示14printf("%p\n", p + 0x1);//这里将p强制转化为了unsigned long类型,非指针,加一就只是加1个字节printf("%p\n", (unsigned long)p + 0x1);//这里将p强制转化为了unsigned int* 类型,加一跳过一个Int类型的大小,4个字节printf("%p\n", (unsigned int*)p + 0x1);return 0;
}

3

答案:
在这里插入图片描述

解析:

int main()
{int a[4] = { 1, 2, 3, 4 };//&a 取出的是整个数组的地址,加1跳过整个数组的大小(4 * 5 =20个字节)int* ptr1 = (int*)(&a + 1);//将p转化为Int 类型,加一就只会跳过一个字节int* ptr2 = (int*)((int)a + 1);printf("%x,%x", ptr1[-1], *ptr2);return 0;
}

在这里插入图片描述

4、

答案:
在这里插入图片描述

解析:

int main()
{//下面数组中的元素有逗号表达式:例:(0,1),这样只会取到1的值,所以数组元素是(1,3,5)int a[3][2] = { (0, 1), (2, 3), (4, 5) };int* p;//a[0]是二维数组第一行的数组名,其内有1,3 两个元素p = a[0];//p[0] = 1printf("%d", p[0]);return 0;
}

5、

答案:
在这里插入图片描述

解析:

int main()
{int a[5][5];//数组指针类型int(*p)[4];//类型不一样,但是也可以存储,只是每次存储4个值p = a;//&p[4][2]-&a[4][2] = -4;将地址转化为16进制printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);return 0;
}

在这里插入图片描述

6、

答案:
在这里插入图片描述

解析:

int main()
{int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };//&aa 是取整个数组的地址,加1跳过整个数组int* ptr1 = (int*)(&aa + 1);//aa 代表二维数组第一行的值,加1跳过5个元素int* ptr2 = (int*)(*(aa + 1));printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));return 0;
}

7、

答案:
在这里插入图片描述

解析:

int main()
{//是一个指针数组,存储的是美格字符串的首元素一直char* a[] = { "work","at","alibaba" };//二级指针来保存a的地址char** pa = a;//正常的加1,跳过一个元素pa++;printf("%s\n", *pa);return 0;
}

8、

答案:
在这里插入图片描述

解析:
解析:

  1. c[]中存放的数据是每个字符串的首元素
  2. cp[]中存放的数据其实就是c中的反过来
  3. 对1:++cpp执行,指向c+2,解引用,得到c+2,再解引用得到了P的地址,打印出point
  4. 加号的优先级很低,先算其他的;打印的时候会把获得地址到\0之间的地址都打印
  5. 对2:++cpp执行,指向c+1,解应用得到C+1,指向N,–执行,指向E,解引用,得到E的地址,在加3,向后移3未,得到的是ENETR中第二个E的地址
  6. cpp已经经过了两次++,cpp[-2]得到得是跳转到C+3,得到F的地址,在进行解引用,跳到FIRST地址中,+3得到S的地址
  7. 对4:cpp还是指向c+1,cpp[-1]跳转到C+2,指向P,cpp[-1][-1]跳转到P的上一个NEW中,对其+1,得到E的地址
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/141935.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2023-09-25 LeetCode每日一题(LFU 缓存)

2023-09-25每日一题 一、题目编号 460. LFU 缓存二、题目链接 点击跳转到题目位置 三、题目描述 请你为 最不经常使用(LFU)缓存算法设计并实现数据结构。 实现 LFUCache 类: LFUCache(int capacity) - 用数据结构的容量 capacity 初始…

腾讯mini项目-【指标监控服务重构】2023-08-25

今日已办 traefik proxy jaeger Prometheus prometheus | Prometheus 配置完依然无法实现 web-url的前缀访问【待解决】 Set span storage type : elasticsearch services:elasticsearch:image: elasticsearch:7.17.12container_name: elasticsearchnetworks:- backend # …

2023.9.23 关于 HTTP 详解

目录 HTTP 协议 认识 URL HTTP 请求 认识方法 HTTP 响应 认识状态码 总结 HTTP 请求的构造 Form 表单构造 AJAX 构造 Postman 构造 HTTP 协议 应用层使用最广泛的协议浏览器 基于 HTTP协议 获取网站是 浏览器 和 服务器 之间的交互桥梁HTTP协议 基于传输层的 TCP协…

软件测试之Web安全测试详解

前言 随着互联网时代的蓬勃发展,基于Web环境下的应用系统、应用软件也得到了越来越广泛的使用。 目前,很多企业的业务发展都依赖于互联网,比如,网上银行、网络购物、网络游戏等。但,由于很多恶意攻击者想通过截获他人…

Visual Studio 2017 安装

C自学精简实践教程 目录(必读) 这篇文章会保证你第一次安装VS2017就成功运行Hello World! 下载Visual Studio Installer Gitee 下载 VS2017/vs2017_Community.exe CalmReason/VisualStudio - 码云 - 开源中国 (gitee.com) 百度云下载 链接:https://pan.baidu…

【ROS入门】使用 ROS 服务(Service)机制实现同步请求与答复

文章结构 任务要求话题模型实现步骤自定义srv定义srv文件编辑配置文件编译 自定义srv调用vscode配置编写服务端实现编写客户端实现 执行启动roscore编译启动客户端和服务端编译启动roscore启动节点 任务要求 编写代码实现 ROS 中的服务请求与答复: 创建服务端,注册…

YZ09: VBA_Excel之读心术

【分享成果,随喜正能量】多要求自己,你会更加独立,少要求别人,你会减少失望,宁愿花时间去修炼 不完美的自己,也不要浪费时间去期待完美的别人!。 我给VBA下的定义:VBA是个人小型自动…

uni-app:实现元素中实现竖直居中

效果展示 前&#xff1a; 后&#xff1a; 未实现前代码 <template><view class"container"><view class"centered-element">我是要被居中的元素</view></view> </template><script>export default {data() {r…

56块钱搭建一个ubuntu 2204 linux 服务器

硬件pdd上淘的一个linux小盒子 应该是以前的机顶盒之类的 实物图如下 今天刚收到小盒子 找了个显示器 键盘 查到小盒子上通电 本来指示灯应该亮的 老板刷机之后 led灯都不亮了 不知道有没有开机 我还以为坏了 刚开始 然后直接连到显示器上 有输出 那说明没问题…

MySQL-树型结构数据查询

表结构 进行树形结构查询&#xff0c;利用特殊语法进行操作 with recursive t as(select parent_id , business_namefrom business_line where id 21union allselect a.parent_id, a.business_namefrom business_line a join t on a.id t.parent_id) select business_name f…

OpenCV两张图片实现稀疏点云的生成

1 E矩阵 1.1 由F到E E K T ∗ F ∗ K E K^T * F * K EKT∗F∗K E 矩阵可以直接通过之前算好的 F 矩阵与相机内参 K 矩阵获得 Mat E K.t() * F * K;相机内参获得的方式是一个较为复杂的方式&#xff0c;需要使用棋盘进行定位获得&#xff0c;我们这里直接使用了 OpenMVG 提…

网络编程-UDP协议(发送数据和接收数据)

需要了解TCP协议的&#xff0c;可以看往期文章 https://blog.csdn.net/weixin_43860634/article/details/133274701 TCP/IP参考模型 通过此图&#xff0c;可以了解UDP所在哪一层级中 代码案例 发送数据 package com.hidata.devops.paas.udp;import java.io.IOException; …

HTML+CSS综合案例二:CSS简介

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title> CSS简介</title><style>h1{color: #33…

Learn Prompt- Midjourney 图片生成:Image Prompts

Prompt 自动生成 前不久&#xff0c;Midjourney 宣布支持图片转 prompt 功能。 原始图片​ blueprint holographic design of futuristic Midlibrary --v 5Prompt 生成​ 直接输入 /describe 指令通过弹出窗口上传图像并发送&#xff0c;Midjourney 会根据该图像生成四种可…

机器学习小白理解之一元线性回归

关于机器学习&#xff0c;百度上一搜一大摞&#xff0c;总之各有各的优劣&#xff0c;有的非常专业&#xff0c;有的看的似懂非懂。我作为一名机器学习的门外汉&#xff0c;为了看懂这些公式和名词真的花了不少时间&#xff0c;还因此去着重学了高数。 不过如果不去看公式&…

渗透测试信息收集方法和工具分享

文章目录 一、域名收集1.OneForAll2.子域名挖掘机3.subdomainsBurte4.ssl证书查询 二、获取真实ip1.17CE2.站长之家ping检测3.如何寻找真实IP4.纯真ip数据库工具5.c段&#xff0c;旁站查询 三、端口扫描1.端口扫描站长工具2.masscan(全端口扫描)nmap扫描3.scanport4.端口表5.利…

短信登录功能如何实现?

简介&#xff1a; 在日常生活中我们登录/注册某些网站/APP是通常可以选择 密码登录和手机号登录。 为什么手机号发送后会有验证码返回呢&#xff1f; 网站如何识别我的验证码是否正确&#xff1f; 如果我的个人网站也想要实现短信登录功能&#xff0c;具体该如何实现&#xff1…

GiliSoft USB Lock v10.5.0 电脑USB设备管控软件

网盘下载 软件功能特性 禁止USB / SD驱动器 禁用从USB / SD磁盘读取&#xff0c;禁用写入USB / SD磁盘&#xff0c;阻止非系统分区。它不允许任何类型的USB / SD驱动器访问您的计算机&#xff0c;除非您授权它或它已在可信设备白名单。 CD锁&#xff0c;块媒体和蓝光光盘 禁用…

混合Rollup:探秘 Metis、Fraxchain、Aztec、Miden和Ola

1. 引言 混合Rollup为新的以太坊L2扩容方案&#xff0c;其分为2大类&#xff1a; 将乐观与ZK技术结合的混合Rollup同时支持公开智能合约 和 私人智能合约 的混合Rollup 本文将重点关注Metis、Fraxchain、Aztec、Miden和Ola这五大项目。 2. 何为混合Rollup&#xff1f; 混合…

ADC数模转化器

简介 • ADC &#xff08; Analog-Digital Converter &#xff09;模拟 - 数字转换器 • ADC 可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁 • 12 位逐次逼近型 ADC &#xff0c; 1us 转换时间 &#xff08;12位:分辨率…