社区
C语言
帖子详情
指针。。。
nanbazhangbiao
2011-03-29 09:59:09
今天朋友一个怪怪的表示,p是一个指针。p[-1]是指什么?
如果char *p="abcde";是不是把p移到e时,p[-1]==d?
...全文
147
11
打赏
收藏
指针。。。
今天朋友一个怪怪的表示,p是一个指针。p[-1]是指什么? 如果char *p="abcde";是不是把p移到e时,p[-1]==d?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
额。。谢谢各位的解答。。
让你不再害怕
指针
指针
声明符号(*)去掉,剩下的部分就是
指针
所指向的类型。我们继续分析例一中的
指针
: (1)int*ptr; //
指针
所指向的类型是 int (2)char*ptr; //
指针
所指向的类型是 char (3)int**ptr; //
指针
所指向的类型是 int* (4...
C/C++
指针
的13份资料
在编程世界中,C 和 C++ 语言是底层系统编程的基石,而
指针
作为这两种语言的核心特性之一,对于理解和掌握这些语言至关重要。本资源包包含13份关于C/C++
指针
的详细资料,旨在帮助编程人员深入理解并熟练运用
指针
。...
免费下载:C语言难点分析整理.doc
可以通过传递数组的
指针
或者
指针
的
指针
来实现二维数组的传递。 ### 15. C语言复杂表达式的执行步骤 复杂的表达式按照运算符的优先级和结合性来执行,遵循特定的规则。 ### 16. C语言字符串函数大全 这部分详细介绍...
指针
的优势和缺点
在说为什么引入
指针
这个问题前先带大家了解一下什么是
指针
?
指针
最为简短的定义:
指针
即为内存的地址。 那什么是内存呢?举个栗子当我们计算 4*(46+4)时,我们人脑会想到先有个中间值 50 然后再计算成 200,...
空
指针
野
指针
与悬垂
指针
空
指针
,野
指针
与悬垂
指针
空
指针
指针
指向的地址为空的
指针
叫空
指针
(NULL
指针
) 野
指针
是指向“垃圾”内存(不可用内存)的
指针
产生原因:
指针
创建时未初始化。
指针
变量刚被创建时不会自动成为NULL
指针
,它会随机...
C语言
70,022
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章