社区
C语言
帖子详情
指针。。。
nanbazhangbiao
2011-03-29 09:59:09
今天朋友一个怪怪的表示,p是一个指针。p[-1]是指什么?
如果char *p="abcde";是不是把p移到e时,p[-1]==d?
...全文
174
11
打赏
收藏
指针。。。
今天朋友一个怪怪的表示,p是一个指针。p[-1]是指什么? 如果char *p="abcde";是不是把p移到e时,p[-1]==d?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
驴被脑袋踢了
2011-03-29
打赏
举报
回复
[Quote=引用 8 楼 svtanto 的回复:]
p[-1] 表达式中,[]是下标运算符,解析以后的意思是基数+偏移
p[-1] = p的地址向左偏移p的元素的大小,假设内存布局左边是小地址,右边是大地址
p[1] = p的地址向右偏移p的元素的大小,假设内存布局左边是小地址,右边是大地址
转换成代数式就是:
p[-1] = p + (-1)
p[ 1] = P + 1
注意:代数式可以交换,所以以下写法是对的
p[-1] = (-……
[/Quote]
p[-1] = p + (-1) 这个不对吧,p[-1] = *(p + (-1))
pathuang68
2011-03-29
打赏
举报
回复
[Quote=引用 2 楼 nanbazhangbiao 的回复:]
那有没有p[-2]、p[-3]这种表达?
[/Quote]
有的。在类的virtual继承时,编译器就会用到负指针。
svtanto
2011-03-29
打赏
举报
回复
p[-1] 表达式中,[]是下标运算符,解析以后的意思是基数+偏移
p[-1] = p的地址向左偏移p的元素的大小,假设内存布局左边是小地址,右边是大地址
p[1] = p的地址向右偏移p的元素的大小,假设内存布局左边是小地址,右边是大地址
转换成代数式就是:
p[-1] = p + (-1)
p[ 1] = P + 1
注意:代数式可以交换,所以以下写法是对的
p[-1] = (-1)[p]
p[ 1] = 1[p]
看起来有点怪,但是没有问题。
赵4老师
2011-03-29
打赏
举报
回复
int a[10]={1,2,3,4,5,6,7,8,9,10};
int *p;
p=&a[5];
printf("%d,%d,%d\n",p[0],p[-1],p[-2]);
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
nanbazhangbiao
2011-03-29
打赏
举报
回复
[Quote=引用 1 楼 laier903 的回复:]
是的,假如你没有移动p,p指向的是首地址,那么p[-1]就是为空。
[/Quote]
那如果是p没有移动,p[-2]指向什么?不可预测?
jialejiahi
2011-03-29
打赏
举报
回复
[Quote=引用 3 楼 fengxuxing 的回复:]
那有没有p[-2]、p[-3]这种表达?
。。。。。。。。
有,只是大多数人不怎么用
p[-2]、p[-3]和p-2,p-3其实是一个意思
[/Quote]
纠正下 p[-2]相当于*(p-2)
lovesi3344
2011-03-29
打赏
举报
回复
从本质上讲 [] 运算符是一个地址运算符, 它执行运算相当于:
数组首地址 + []内的数值 * sizeof(数组类型)
Qlaiaqu
2011-03-29
打赏
举报
回复
那有没有p[-2]、p[-3]这种表达?
。。。。。。。。
有,只是大多数人不怎么用
p[-2]、p[-3]和p-2,p-3其实是一个意思
nanbazhangbiao
2011-03-29
打赏
举报
回复
那有没有p[-2]、p[-3]这种表达?
LAIER903
2011-03-29
打赏
举报
回复
是的,假如你没有移动p,p指向的是首地址,那么p[-1]就是为空。
nanbazhangbiao
2011-03-29
打赏
举报
回复
额。。谢谢各位的解答。。
指针
,
指针
,
指针
。。。
本文详细解析了C语言中
指针
的概念,包括
指针
常量与常量
指针
的区别、
指针
运算的特点、
指针
与数组的关系、
指针
数组与数组
指针
的不同以及
指针
函数与函数
指针
的应用。
指针
。。。。。
本文记录了一名初学者面对
指针
时的困惑与学习过程,从一维到二维
指针
,再到数组
指针
与
指针
数组的区别,并介绍了malloc与free函数的基本使用。
指针
。。。。
本文通过一个C++代码示例,详细解析了
指针
、数组和字符串的内存使用及操作方式。从sizeof运算符的使用到
指针
与数组的关系,再到变量的地址和引用,全面展示了C++中这些基本概念的应用。
C
指针
。。。
本文介绍了C语言中的
指针
概念,包括内存地址的获取、
指针
变量的声明与使用、NULL
指针
的处理,以及常见的
指针
运算和在函数中的应用。
指针
的
指针
???。。。
本文深入探讨了C语言中二级
指针
的作用,特别是在动态内存分配和函数参数传递中的应用。通过示例代码,解释了为何在需要在函数内部改变
指针
变量的值时需要使用二级
指针
。文章强调了
指针
作为值传递的特点,以及如何通过二级
指针
实现地址传递,从而达到改变堆中结构体数据的目的。同时,提供了实际的代码示例,演示了如何正确使用二级
指针
进行动态内存分配和修改
指针
指向的变量。
C语言
70,038
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章