指针笔试题解析(2)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 指针笔试题解析(2)

指针对于不少人来说:是多么一个难的代名词呀!!当然这个里面也包括笔者!所以……笔者对于指针满满的后怕!但是也有着更多的期待!毕竟阴影是用来打破的!后怕打破了,也就是龙腾虎跃的时候了!!下面进入正题:


笔者将用代码+解析的方式来带领大家走进:指针!!


#include <stdio.h>
int main()
{
  int a[4] = { 1,2,3,4 };
  int* ptr = (int*)(&a + 1);
  int* ptr2 = (int*)(int)(a + 1);
  printf("%x %x\n", ptr[-1], *ptr2);  //4    2
  return 0;
}

注意,笔者的代码是在vs2022 的x86环境下进行演示的!请注意细节,若是在vs2022的x64环境下,将会出现不一样的结果!但那个结果也是正确的!


0a2653c851af460fa595bd959398a8f1.png


若是有老铁能直接看懂,并且能够跟答案对上号,那么这篇博客,这位老铁就没有看的必要了,下面内容主要是对上面的代码的讲解!并不做其他的内容!但若是有兴趣,可以进一步欣赏!

下面进入讲解部分:

2d65d23f6d4748949b924e4057485923.png

对于:%p  :打印地址!


%x  : 以十六进制形式进行打印!

1.(int*)(&a + 1)  : &a取出的是这个数组的地址,&a+1,跳过整个数组,通过int* ptr = (int*)(&a + 1); 赋值给ptr1; 即ptr1 yu  &a+1指向同一位置!


6de278e6d6694ce5bb08e7e842b7e74b.png


2. (int*)(int)(a + 1)  : a是这个数组的数组名,数组名表示首元素的地址!(int)a 是指,a被强制类型转化为:int(整型)!!假设:起始地址为:0x00000015(方便计算),将其转化为整型:1*16的一次幂+5*16的零次幂=21;(int)a+1—》21+1=22;(int*)(int)(a + 1) 再将22认为是一个地址,转化为(int*)类型,地址22为:0x00000016;而0x00000015与0x00000016之间相差一个字节!一个字节一个地址!


12c3b7f3f8814309a195c64f051d4445.png


3. 假设在VS中是小端存储模式(其实在vs2022中是小端存储)!


数组元素随着下标的变化,由地址到高地址变化!


1的十六进制为:0x00000001;


2的十六进制为:0x00000002;


小端存储模式,(倒着存):低地址放在低地址处!高地址放在高地址处!


int 类型占4个字节!对于数组:int a[4] = { 1,2,3,4 };


6de278e6d6694ce5bb08e7e842b7e74b.png


对于:int* ptr = (int*)(&a + 1)  : &a+1之后,强制类型转换为:(int *)整型指针!


对于:int* ptr2 = (int*)(int)(a + 1)  : a是一个数组名,表示首元素的地址!


a的类型为:本来应该为:int *类型,而通过  :(int)(a + 1)  跳过一个字节!即00000002!从而打印出来!!


从而代码的运行结果为:


34e8d716411043c08c7ffba9fbba23de.png


由于笔者最近精神不佳!简简单单的一道题!目前已经讲解完毕!接下来,笔者将会给大家,讲解一些 :指针笔试题解析!来供大家参考!!!


相关文章
|
2月前
|
存储 程序员 C++
深入解析C++中的函数指针与`typedef`的妙用
本文深入解析了C++中的函数指针及其与`typedef`的结合使用。通过图示和代码示例,详细介绍了函数指针的基本概念、声明和使用方法,并展示了如何利用`typedef`简化复杂的函数指针声明,提升代码的可读性和可维护性。
116 1
|
4月前
|
Serverless 编译器 C语言
【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)
【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)
|
6月前
|
SQL 存储 算法
【数据挖掘】恒生金融有限公司2023届秋招数据ETL工程师笔试题解析
恒生科技2022年9月24号数据ETL工程师岗位的笔试题目及答案汇总,包括了SQL选择题、SQL编程题和业务应用SQL编程题,涵盖了数据库基础知识、SQL语句编写以及数据仓库概念等多个方面。
98 2
【数据挖掘】恒生金融有限公司2023届秋招数据ETL工程师笔试题解析
|
6月前
|
机器学习/深度学习 自然语言处理 算法
【数据挖掘】2020奇安信秋招算法方向试卷1 笔试题解析
2020年奇安信秋招算法方向试卷1的题目解析,覆盖了数据结构、机器学习、深度学习、自然语言处理、排序算法、激活函数、主题模型、采样方法、图像处理等多个领域的知识点。
83 1
【数据挖掘】2020奇安信秋招算法方向试卷1 笔试题解析
|
6月前
|
机器学习/深度学习 存储 算法
【数据挖掘】2020奇安信秋招算法方向试卷3 笔试题解析
2020年奇安信秋招算法方向试卷3的题目解析,涵盖了数据结构、机器学习、深度学习、自然语言处理、排序算法、激活函数、PCA、词嵌入库等多个领域的知识点。
99 1
【数据挖掘】2020奇安信秋招算法方向试卷3 笔试题解析
|
8月前
|
存储 C++
有关【指针运算】的经典笔试题
有关【指针运算】的经典笔试题
48 4
|
3月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
140 2
|
1天前
|
机器学习/深度学习 自然语言处理 算法
生成式 AI 大语言模型(LLMs)核心算法及源码解析:预训练篇
生成式 AI 大语言模型(LLMs)核心算法及源码解析:预训练篇
|
2月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析

推荐镜像

更多