指针的运算

这节主要解析几个指针运算的题加深对指针的理解。 

题目一

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

程序结果是什么?
 

结果是2,5

首先看int * ptr = (int*)( &a + 1)

&a, 意思是拿到a数组的地址, 加上1就是偏移一个数组的大小,即偏移5个整形。然后强制类型转换成int*赋值给ptr,这个时候ptr是个野指针。 

然后打印*(a + 1) 好说, 打印的是2, 然后*(ptr - 1), 意思是 ptr向后偏移一个整形, 本来ptr指向了a偏移5个整形的位置, 现在又向后偏移了一个位置, 所以,结果就是a偏移4个整形的位置。 也就是5那个位置。 所以打印是5.

答案2,5

题目二

#include <stdio.h>
int main()
{
int a[3][2] = { (0, 1), (2, 3), (4, 5) };
int *p;
p = a[0];
printf( "%d", p[0]);
return 0;
}

输出结果是什么?

结果是0

首先p应该指向的是a这个二维数组的第一行。 

a【0】是数组指针,但是被赋值给p后隐式类型转换成整形指针。 最后p【0】输出0.

题目三

#include <stdio.h>
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;
}
输出结果是啥?

10,5

要知道输出是什么, 只需要直到ptr1, ptr2分别指向什么。

首先, ptr2好说, 就是二维数组和数组指针结合问题.aa是一维数组地址, 偏移一个单位变成第二行的数组地址。 然后赋值给ptr2同时隐式类型转换。 ptr2指向6的位置。

对于ptr1, &aa意思是拿到二维数组的地址, 加一直接偏移10个单位。 成为野指针。

然后赋值给ptr1, ptr1这个时候是个野指针。 指向10的下一个位置。 但是减一后向后偏移一个单位指向10, 所以打印10。

答案10, 5

-------------------------------------------------------------------------------------------------------------

题目四

char arr[] = {'a','b','c','d','e','f'};
printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(arr+0));
printf("%d\n", sizeof(*arr));
printf("%d\n", sizeof(arr[1]));
printf("%d\n", sizeof(&arr));
printf("%d\n", sizeof(&arr+1));
printf("%d\n", sizeof(&arr[0]+1));

分析分别打印什么

arr在sizeof中标识数组整体,所以第一个sizeof打印6.

arr + 0已经发生了计算, 这个时候整体标识一个地址, 所以第二个答案是4或者8

*arr解引用, 一个字符大小是1,所以第三题为1.

arr【1】同第三题, 大小是1。

&arr代表数组的地址, 既然是地址, 那么就是4或者8.

第六题同第五题, 都是地址。 

第七题同样是地址。 


 

题目五

char arr[] = {'a','b','c','d','e','f'};
printf("%d\n", strlen(arr));
printf("%d\n", strlen(arr+0));
printf("%d\n", strlen(*arr));
printf("%d\n", strlen(arr[1]));
printf("%d\n", strlen(&arr));
printf("%d\n", strlen(&arr+1));
printf("%d\n", strlen(&arr[0]+1));
分析打印的结果是什么

第一题首先不确定。 因为字符数组arr没有\0,所以strlen不能判断大小。

第二题同样的, 没有\0不能判断。

第三题参数错误, strlen的参数应该是地址, 而不是一个字符常量。 

第四题同第三题。 

第五题:没有\0。

第六题: 对数组取地址再加1就跳过数组了。野指针。

第七题:同第六题。 

题目六

char arr[] = "abcdef";
printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(arr+0));
printf("%d\n", sizeof(*arr));
printf("%d\n", sizeof(arr[1]));
printf("%d\n", sizeof(&arr));
printf("%d\n", sizeof(&arr+1));
printf("%d\n", sizeof(&arr[0]+1));
分析打印的结果

第一题应该是7, 因为字符串后面默认有一个\0。

第二题加了0就是一个地址了。 所以4或8.

第三题1.

第四题同第三题, 1.

第五题地址, 4或者8.

第六题地址

第七题同样是地址。 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文轻松学会远程服务器/docker内 vscode,调试(debug)无/多参数/bash以及多工作空间运行的python程序,欢迎大佬补充,一起学习

至于如何SSH、docker以及无需参数的程序调试这篇就先不说了。本篇文章主要记录一下多参数和多工作空间调试的问题。 一、launch.json文件 如上图所示&#xff0c;正常情况下当我们想要调试项目名字为0的目录下的train.py文件时&#xff0c;我们会按顺序点1&#xff0c;2&#…

防范服务器被攻击:查询IP地址的重要性与方法

在当今数字化时代&#xff0c;服务器扮演着重要的角色&#xff0c;为企业、组织和个人提供各种网络服务。然而&#xff0c;服务器也成为了网络攻击者的目标之一&#xff0c;可能面临各种安全威胁&#xff0c;例如DDoS攻击、恶意软件攻击、数据泄露等。为了有效地防范服务器被攻…

[COCI2021-2022#1] Kamenčići 解题记录

[COCI2021-2022#1] Kamenčići 解题记录 题意简述 一个长度为 N N N 的字符串 S S S&#xff0c;仅由 C 和 P 组成。轮流每次从两端取出一个字符&#xff0c;先取出 K K K 个 C 的失败&#xff0c;求先手必胜还是必败。 题目分析 考虑区间 DP&#xff0c;设 d p l , r ,…

C++ 类型转换 未解决

类型转换 类型转换 类型转换是将一个数据类型的值转换为另一种数据类型的值。 C 中有四种类型转换&#xff1a;静态转换、动态转换、常量转换和重新解释转换。 静态转换&#xff08;Static Cast&#xff09; 静态转换是将一种数据类型的值强制转换为另一种数据类型的值。 静态…

用 docker 创建 jmeter 容器, 实现性能测试,该如何下手?

用 docker 创建 jmeter 容器, 实现性能测试 我们都知道&#xff0c;jmeter可以做接口测试&#xff0c;也可以用于性能测试&#xff0c;现在企业中性能测试也大多使用jmeter。docker是最近这些年流行起来的容器部署工具&#xff0c;可以创建一个容器&#xff0c;然后把项目放到…

如何规划面向未来的架构?

未来是指未来的业务&#xff0c;稳定性&#xff0c;成本 未来系统爆发的增长&#xff0c;这就是规划未来架构的目的 从两个方面入手&#xff1a;1.容量规划 2.底层架构 容量规划&#xff1a; 摸清家底&#xff1a; 各个模块日常应用水位以及历史峰值 99.9%压测 得出QPS vs RT …

Navicat破解 Navicat下载安装 附教程 免费

百度网盘&#xff1a;https://pan.baidu.com/s/1wRRN_18_uXxPiIWCS4l43A 麻烦各位师傅帮忙填写一下问卷&#xff0c;提取码在问卷填写结束后显示~ 【https://www.wjx.cn/vm/mBBTTKm.aspx# 】 &#xff08;资料来源于网络&#xff0c;侵告删&#xff09;

【护网资料】 应急响应 安全设备 告警分析 蓝中必看 HVV 护网行动

百度网盘&#xff1a;https://pan.baidu.com/s/1wDVamgkyXwP-yiWN4jPEGQ 麻烦各位师傅帮忙填写一下问卷&#xff0c;提取码在问卷填写结束后显示~ 【https://www.wjx.cn/vm/mBBTTKm.aspx# 】 &#xff08;资料来源于网络&#xff0c;侵告删&#xff09;

Linux 网络相关测试指令

1、连接网络后ping不通外网 1>ping不通外网IP,例如14.119.104.189 (www.baidu.com) route指令查看是否配置网关 添加网关 route add default gw 192.168.1.1 2>能ping通IP,但ping不通域名 添加DNS配置 /etc/resolv.conf 2、iptables NAT转换 ifconfig usb0 192.1…

【CTF笔记】 CTF web方向笔记分享 免费 附预览图

个人不怎么记东西&#xff0c;笔记不多&#xff0c;师傅们凑合看… 百度网盘&#xff1a;https://pan.baidu.com/s/1PspihUX28Y_AOQZPurHqKA 麻烦各位师傅帮忙填写一下问卷&#xff0c;提取码在问卷填写结束后显示~ 【https://www.wjx.cn/vm/mBBTTKm.aspx# 】 &#xff08;…

重学SpringBoot3-路径匹配机制

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-路径匹配机制 AntPathMatcherPathPatternParser 和 PathPattern演示AntPathMatcher 示例PathPattern 示例性能和精确度的提升 选择使用哪一种 在 Spring…

现代 Android 开发的第一步Kotlin

Kotlin 入门教程&#xff1a;现代 Android 开发的第一步 引言 Kotlin&#xff0c;这门由 JetBrains 团队开发的现代编程语言&#xff0c;自 2011 年诞生以来&#xff0c;以其简洁、安全、实用的特性&#xff0c;迅速在 Android 开发社区中获得了广泛的认可。2017 年&#xff…

迷宫问题三种种解法(A*算法+BFS+双向广搜)

题目描述 小明置身于一个迷宫&#xff0c;请你帮小明找出从起点到终点的最短路程。 小明只能向上下左右四个方向移动。 输入格式 输入包含多组测试数据。输入的第一行是一个整数T&#xff0c;表示有T组测试数据。 每组输入的第一行是两个整数N和M&#xff08;1<N,M<100&a…

【LeetCode】升级打怪之路 Day 24:回溯算法的解题框架

今日题目&#xff1a; 46. 全排列51. N 皇后78. 子集 目录 LC 46. 全排列LC 51. N 皇后LC 78. 子集 【classic】1&#xff09;思路一2&#xff09;思路二 今天学习了回溯算法的解题框架&#xff1a;回溯算法解题套路框架 | labuladong 回溯算法的整体框架都是&#xff1a; re…

力扣L11--- 344.反转字符串(JAVA版)-2024年3月15日

1.题目 2.知识点 交换两个变量值的代码 char temps[left];//temp为暂时的变量&#xff0c;left是左指针&#xff0c;将left暂时存储在temp里面s[left]s[right];//将右指针的值赋给左指针s[right]temp;//将temp的值给右指针left;//左指针向左移动right--;//右指针向右移动3.代码…

Nginx高级技术: 地址重写 Rewrite和应用场景

一、rewrite 场景示例说明 1、基于客户端指定 IP 访问跳转 应用场景说明&#xff1a;指定的 IP地址能正常访问192.168.179.10访问正常。 Rewrite配置如下&#xff1a; vim /usr/local/nginx/conf/nginx.conf server { listen 80; server_name www.old.com; …

【嵌入式DIY实例】-最大功率点跟踪 (MPPT) 太阳能充电控制器

最大功率点跟踪 (MPPT) 太阳能充电控制器 文章目录 最大功率点跟踪 (MPPT) 太阳能充电控制器1、应用介绍2、硬件准备3、太阳能充电控制器介绍4、硬件设计5、驱动代码实现1、应用介绍 在这个应用中,我们将使用 Arduino 并结合许多主动-被动电子设备构建我们自己的 MPPT 太阳能…

2024年【广东省安全员C证第四批(专职安全生产管理人员)】考试总结及广东省安全员C证第四批(专职安全生产管理人员)模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 广东省安全员C证第四批&#xff08;专职安全生产管理人员&#xff09;考试总结是安全生产模拟考试一点通总题库中生成的一套广东省安全员C证第四批&#xff08;专职安全生产管理人员&#xff09;模拟试题&#xff0c;…

【ShenYu源码阅读】支持提醒通知设计,来看看开源贡献者都做了什么

相信大家碰到源码时经常无从下手&#x1f643;&#xff0c;不知道从哪开始阅读&#xff0c;面对大量代码晕头转向&#xff0c;索性就读不下去了&#xff0c;又浪费了一次提升自己的机会&#x1f62d;。 我认为有一种方法&#xff0c;可以解决大家的困扰&#xff01;那就是通过阅…

修复ElementUI中el-select与el-option无法通过v-model实现数据双向绑定的问题

1. 问题描述 需求&#xff1a;在使用ElementUI时&#xff0c;通过el-select和el-option标签实现下拉列表功能&#xff0c;当el-option中的选项被选中时&#xff0c;被选中的选项可以正确回显到已选择的列表中。 对于上面的下拉列表&#xff0c;当我们选中“超级管理员”的选项…