指针+1问题

C语言中的二级指针(1) -- 值传递问题 先看一个我们非常熟悉的代码: #include void swap(int a, int b) { int tmp; tmp = a; a = b; b = tmp; } int main() { int a = 3, b = 5; swap(a, b); printf("a = %d, b = %d\n", a, b); return 0; }我们都知道,这段代码中的s 阅读详情

指针+1问题

看下面这个代码

#inclide <stdio.h>
int main()
{
	int arr[]={1,2,3,4,5,6,7,8,9,10};
	int *p=arr;
	p++;
	*p=10;
	p++;
	*p=20;
	printf("%d,%d\n",arr[0],arr[1]);
	return 0;
}

在不明确的条件下*p+1我们一般都会想到两种情况:
(1)加一个字节
(2)加一个单元格
那么这两种情况到底谁是正确的,我们来分析一下
如果是加一个字节,如图
在这里插入图片描述
最终我们可以得出蓝色框中的值为2561,这当然不可能,所以应该是加一个单元格;
所以上面代码的结果是

1,10
请按任意键继续. . .

总结

指针+i,表示加i个单元格,其加i*sizeof(指针本身去掉一个 * )字节

我们再来看个代码

#include <stdio.h>
int main()
{
	int *p = (int *)2000;
	printf("%d\n",p-2);            //2000-2*sizeof(int)=1992
	printf("%d\n",(char *)p-2);    //2000-2*sizeof(char)=1998
	printf("%d\n",(short *)p-2);   //2000-2*sizeof(short)=1996
	printf("%d\n",(long long *)p-2);//同上1984
	printf("%d\n",(float *)p-2);    //1992
	printf("%d\n",(double  *)p-2);  //1984
	printf("%d\n",(int **)p-2);     //2000-2*sizeof(int*)=1992
	printf("%d\n",(unsigned long)p-2);//1998****不是指针,是个无符号的长整型

	return 0;
}

答案为

1992
1998
1996
1984
1992
1984
1992
1998
请按任意键继续. . .

C++笔记之对指针类型的变量进行+1操作 如果指针指向的是自定义的数据类型(如结构体或类),对指针执行"+1"操作,指针将会指向下一个相同类型的对象,即内存地址会向后移动整个自定义数据类型的字节数。示例代码:总结:对指针执行"+1"操作会使指针指向下一个相同类型的内存单元(对于基本数据类型)或对象(对于自定义数据类型)。记住,指针的算术运算需要谨慎处理,确保不会越界或指向无效内存。 阅读详情

相关推荐

图自编码器(GAE)与变分图自编码器(VGAE)

在学习图自编码器之前先了解一下自编码器与变分自编码器。

小鱼的小窝 1万+

指针+1的问题

指针 + 1 并不是指针代表的地址值 + 1. 指针变量加1,即向后移动1 个位置表示指针变量指向下一个数据元素的首地址。而不是在原地址基础上加1。至于真实的地址加了多少,要看原来指针指向的数据类型是什么。 char a = a;char *p = &a;cout输出:0012FF33  0012FF34p指向的是一个字符,p+1就是移动一个字符大小,一个字符就是一个字

wade23的专栏 1万+

[Ethernet in CANoe]4--CANoe工程中SOME/IP报文的详细介绍(二)

介绍了SOME/IP报文的SD报文(ServiceDiscovery),本片文章开始继续介绍SOME/IP报文。

汽车ECU自动化测试 1114

c++指针加1

int64_t *p2; char *p1; p1=(char*)0x800000; p2=(int64_t*)0x800000; char*a=p1+2; int64_t*b=p2+2; 那么a和b的值分别是:0x800002和0x800010因为设指针p的类型为T,则p+i=(p的值)+i*sizeof(T)的字节数char是1个字节,int64_t是8个字节。p1+2=(p1中存...

lhj_sjtu的博客 5697

别再只用CANape测数据了!手把手教你用ASAP2 Studio编辑A2L文件(附MAP文件更新避坑指南)

本文深入探讨ASAP2 Studio在ECU开发中的高阶应用,特别是如何利用其编辑A2L文件并同步更新MAP文件,提升测量标定效率。文章详细解析了ASAP2 Studio的双向同步能力、MAP文件更新全流程及变量管理技巧,帮助工程师避免常见错误,优化工作流程。

weixin_26833939的博客 508

从宁德新能源面试官视角,拆解Halcon/OpenCV图像处理工程师的硬核技能树(附避坑指南)

本文从宁德新能源面试官视角出发,详细拆解Halcon/OpenCV图像处理工程师的核心技能树,涵盖硬件选型、算法实现和系统工程思维三大能力维度。文章提供工业视觉工程师面试的实战避坑指南,包括硬件配置要点、算法优化技巧及职业发展路径,助力求职者系统提升图像处理专业技能。

weixin_28732953的博客 129

指针加1的含义、指针减法运算

实例 #include <stdio.h> int main() { char a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; char* p1 = a; printf("p1=%p\n", p1); printf("p1+1=%p\n", p1 + 1); int b[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int* p2 = b; printf("p2=%p\n", p2); printf("p2+1=%p

Akalaka的博客 5207

YOLO26涨点改进 | 独家主干改进篇 | CVPR 2024 | YOLO26利用InceptionNeXt主干,将大核深度卷积分解为四个并行分支,在提升性能的同时显著降低计算效率

本文聚焦YOLO26的核心涨点改进——基于CVPR 2024收录的InceptionNeXt主干网络,深度拆解了其“大核深度卷积四分支拆解”的核心逻辑,通过实验验证了改进的有效性,同时提供了可快速复现的工程代码与进一步涨点的思路。

qq_36130719的博客 574

C++指针加减法详解:深入理解指针运算的本质

C++指针加减法详解:深入理解指针运算的本质

m0_63951116的博客 676

爬虫实战:拆解WASM加密参数,破局2026电商动态接口反爬(实测某头部电商可用)

sign和wasm_token,而且每次请求这两个参数都在动态变化。用常规的参数拼接、MD5加密尝试还原,结果全是403;反编译前端JS,发现核心加密逻辑被打包成了.wasm,把关键参数加密、签名逻辑藏在二进制模块里,让爬虫无法直接逆向JS拿到加密规则。前后折腾了5天,从WASM文件解析、JS与WASM交互逻辑拆解,到本地还原加密参数、实战验证,踩了无数坑(比如WASM版本不兼容、内存数据读取失败、加密依赖环境缺失),最终成功还原了加密流程,稳定爬取商品详情、价格、销量等核心数据,连续运行72小时无封禁。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1913

【论文硬核拆解】Ctx2Skill:让大模型自己跟自己玩,从上下文里「进化」出可复用技能

论文选择自然语言技能可解释性:技能是人类可读的 Markdown 文件,可以审查、编辑、调试可迁移性:即插即用,从一个模型到另一个模型无需参数访问:对闭源模型友好这比 SKILL0/SkillRL 等参数内化方法更实用,尤其是在商业 API 场景。

步子哥的博客 155

Android 解决Android studio4.1.1不适配ButterKnife的问题(已解决可以获取控件但是报空指针的问题)

前言 解决4.1.1版本butterknife无法使用的问题 适配 上图中是以前在3.x版本中使用的ButterKnife,但是它并不适配4.1.1版本,所以我们需要下载另一个,如图: 下载安装完成后,你就会发现你的ButterKnife还是不能用(狗头)。这时候我们需要改一下插件的路径。 4.1.1版本的保存路径和以前版本的不太一样,3.x及之前的都是保存在用户根目录里的,而4.1.1的路径是在C:\Users\Administrator\AppData\Local\Google\AndroidStu

weixin_46603990的博客 7305

Qt Creator牵手DeepSeek,开启AI开发新征程

Qt Creator 是一款功能强大的跨平台集成开发环境(IDE),专为 Qt 应用程序开发量身定制。它支持在编程过程中使用 GitHub Copilot 等编码助手,能帮助开发者为桌面、移动端和嵌入式平台创建软件。在代码编辑方面,Qt Creator 具备代码补全、语法突出显示、重构等功能,内置文档也随手可得,极大提高了代码编写的效率和准确性。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 7189

多级指针+1问题 以及定义了一个字符串,并且字符指针k

char k={“abcdefghijklmn”}; // k=k+1; // p=((char)(&k) + 0); char **p=&k; printf(“sizeof§:%lu\n”,sizeof§); printf(“sizeof(*p):%lu\n”,sizeof(*p)); printf(“sizeof(k):%lu\n”,sizeof(k)); printf("%s...

m0_46615101的博客 421

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

双指针问题1

双指针问题总结1。

qq_45965652的博客 938

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【记录一下shardingjbdc3.1.0 空指针问题】

3.抛出异常: 如图所示:sqlRoute(); 会执行到 yml配置文件中的自定义分片类MayiKtShardingPreciseConfig,但是在finally中执行的方法refreshTableMetaData(connection.getShardingContext(), routeResult.getSqlStatement()); 会把 MayiKtShardingPreciseConfig 报错抛出的异常覆盖掉, 导致 在refreshTableMetaData中抛出空指针异常;错误信息

qq_39925099的博客 811

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

指针 +1 的问题

首先:指针 + 1 并不是指针代表的地址值 + 1 指针变量加1,即向后移动1 个位置表示指针变量指向下一个数据元素的首地址。而不是在原地址基础上加1。至于真实的地址加了多少,要看原来指针指向的数据类型是什么。 例1: char a = 'a'; char *p = &a; coutvoid*)p" "void*)(p+1) 输出:0012FF33 0012FF34 p指向的是一个字符

盖伊福克斯 1037

##关于用vector存取指针及相关delete问题(用序偶对解决0-1背包)

仅以此篇博客来纪念本菜鸟的一次“成长“ 关于用vector存取指针及相关delete问题(用序偶对解决0-1背包) 我在选用序偶对解决0-1背包时,选取的结构是vector,用vector<int*>来存放其中一个序偶对集合,用vector<vector<int *>>来存放所有序偶对集合,用一个定长为2的一维数组来存取序偶对(选取的结构可能不入大神们法眼,轻喷...

CRAZY_MA的博客 1400

C语言数组指针加1的问题

指向数组的指针存储的是连续的内存地址,而内存地址的最小编址单位是1字节,如果存储的数据本身移动几个字节,则内存地址也相应地移动几个字节。而数组指针的加1移动几个字节,取决于所指向的数组类型,这部分是由C/C++的编译器实现去处理的。下面具几个例子说明(下面的例子在MSVC的X64平台,指针本身占8个字节): 1. 用C++语言测试 (1) 指向1字节的数组指针: void TestPointerSize() { char data[] = {1,2,3,4,5,6,7,8,9,10}; ...

ComputerInBook的专栏 6045

指针的问题1

指针使用前需要先行定义变量。就像下面这样 #include int main () { int number =20; int *pointer=&number; int a =0; a=*pointer +5; result 0; } 很明显这个简单的程序运行的结果是25; 那么问题来了,假如我在指针被赋值变量地址之后对变量进行新的赋值会发生什么情况呢? 程序如下:

Jason_zhaojie的博客 333

关于指针与数组下标加1的问题

我们在学习C语言的时候经常会碰到指针或者数组下标加1,这也是个令大家非常头疼的问题,那就是它加1以后实际上是加了多少,指针或者数组的下标移动到了哪里。 下面我就通过举几个例子来告诉大家答案。 例1: #include &lt;stdio.h&gt; int main(int argc, char **argv) { int a[3]={ 0 }; ...

tjy199610_10的博客 2229

【5.1】指针算法-指针求接雨水问题

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图 ,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。输入输出: 6。

攻城狮7号的博客 1038

关于指针问题的期末复习(1)

可以去前面文章看看我的代码库哦,宝宝们。

2402_86688931的博客 800

C语言中指针访问数组,指针+1的问题

题意说明: 在C语言中,我们可以使用指针地址的变化来访问数组中不同位置的元素,但为何每次指针只要加一就能访问到下一个元素了呢? #include <stdio.h> int main() { int i, * pa, a[] = { 0,1,2,3,4 }; pa = a; //数组名地址赋值给指针 for (i = 0;i < 5;i++) { printf("%d ", pa[i]);//通过下标来访问数组 } printf("\n"); for

Clay_Wong的博客 1079

1、函数参数指针传递问题

一、 函数有指针类型的参数时,常常容易遇到的错误。 //程序1 void fun(int *a,int *b) { int *tmp; tmp = a; a = b; b = tmp; } int main() { int a = 5; int b = 6; int *pa = &a; int *pb = &b; fun1(pa,pb); printf("a = %d b= %d\n",a,b);

qq_39405113的博客 598

开发笔记1 关于指针,结构体使用指针的问题

指针在使用中是十分方便的,在头文件中使用自定义类名来创建指针,可以省去空间。 在类中使用结构体使用指针要慎重,因为用结构体定义指针时容易忘记给指针开空间,此时的指针所是野指针,要开辟空间才能使用 ...

y1076865704的博客 211
上一篇: 两个数交换问题
下一篇: 动态内存
LJXFuLe
博客等级 码龄8年 7粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值