考验大家指针功底的时候到了:请问如何理解 (int*)1 + 1 ?

news/2024/7/1 2:35:20

 来,猜猜看,这里的执行结果是什么?

这是今天课上的一道理解题,给大家一点点思考时间。

(心里有答案了再往下滑哦) 

5

4

3

2

1

.

答案是报warning!因为%d不是用来输出指针的哈哈哈 

不过如果忽略warning呢?

那么最终答案是:5 

为什么是 5?

1 + 1 = 5?

哈哈别急,让我们来进行一些简单的实验。

#include<stdio.h>
int main()
{
    printf("%d\n", (int *)1 + 1); // 输出5

  //接下来把%d改为%p,输出地址
    printf("%p\n", (int *)1 + 1); // 输出0x5

    printf("%p\n", (int *)1 + 2); // 输出0x9

    printf("%p\n", (int *)2 + 1); // 输出0x6
     
    printf("%p\n", (int *)2 + 2); // 输出0xa

    printf("%p\n", (int *) (1 + 1) ); // 输出0x2

    return 0 ;
} 

多实验几次就会明显发现,

第一个数每+1地址增加1,

第二个数每+1地址就增加4,

而(int*)(1+1) 也就是(int*)2,指向的就是地址2,

所以,系统应该是先执行(int*)1,将指针指向地址1,然后再执行+1,使指针指向当前地址的下一个位置,因为int占4个字节所以指针每次跳4个,所以最终指向1+4,也就是地址5的位置。

(如果将int改为其他类型也是同样:)

#include<stdio.h>
int main()
{
    printf("%d\n", (int *)1 + 1); //int 占4字节,输出5
 
    printf("%d\n", (short *)1 + 1); //short 占2字节,输出3

    printf("%d\n", (long long i*)1 + 1); //long long 占8字节,输出9

    return 0 ;
} 

 

以上是我的个人理解,欢迎大佬们前来赐教~

 


http://lihuaxi.xjx100.cn/news/1052868.html

相关文章

10种黑客类型,你知道几种?

黑客一般有 10 种类型 1、白帽黑客 白帽黑客是指通过实施渗透测试&#xff0c;识别网络安全漏洞&#xff0c;为政府及组织工作并获得授权或认证的黑客。他们也确保保护免受恶意网络犯罪。他们在政府提供的规章制度下工作&#xff0c;这就是为什么他们被称为道德黑客或网络安全…

软件测试面试10分钟不到被赶出来,问的实在是太变态了...泪流满面

干了两年外包&#xff0c;本来想出来正儿八经找个互联网公司上班&#xff0c;没想到算法死在另一家厂子。 自从加入这家外包公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到11月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资…

Java读取文件方式

IO流读取 文本内容 按行读取文件内容 指定编码格式&#xff08;推荐&#xff09; public static void main(String[] args) throws UnsupportedEncodingException {read("D:\\test.txt");}public static void read(String path) {BufferedReader reader null;try …

2023年陕西中级工程师职称怎么评?

夏季开始了&#xff0c;又到了职称评审正式申报提交资料的时候了&#xff0c;很多想评职称的小伙伴都不知道中级职称要怎么评&#xff1f;需要本人提供什么资料&#xff1f;配合哪些事情&#xff1f;怎么评一个中级职称呢&#xff1f;接下来小周跟您一起来看看&#xff1a; 想要…

NumberPicker分析(二)

NumberPicker分析(二) NumberPicker继承自LinearLayout。一般而言&#xff0c;无论是继承自View&#xff0c;还是继承自ViewGroup&#xff0c;必然会经过如下的几个阶段&#xff1a; onMeasureonLayoutonDraw onMeasure 在onMeasure方法测量当前控件大小&#xff0c;为正式…

K8s集群搭建-Kubeadm方式搭建集群【1.23.0版本】

文章目录 一、初始化准备二、安装kubeadm三、初始化Master集群四、将新的Node节点加入集群五、部署CNI网络插件六、其他配置 Kubernetes1.24(包括1.24)之后不在兼容docker,如果有需要兼容docker的需求&#xff0c;则安装一个 cri-docker的插件&#xff0c;本文使用的是kuberne…

混淆电路(GC)

基本概念 在混淆电路框架下&#xff0c;任意功能函数可被表示为一个与门和异或门组成的布尔电路&#xff0c;协议的参与方由生成方&#xff08;Garbler&#xff09;和计算方&#xff08;Evaluator&#xff09;组成。 **大致的流程&#xff1a;**生成方生成密钥并加密查找表&am…

codemirror 5前端代码编辑器资料整理。

CodeMirror 是基于js的源代码编辑器组件&#xff0c;它支持javascript等多种高级语言&#xff0c;tampermonkey内置的代码编辑器就是基于它。它的按键组合方式兼容vim&#xff0c;emacs等&#xff0c;调用者还可自定义”自动完成“的列表窗口&#xff0c;自由度极高&#xff0c…