标题:关于指针偏移量。
只看楼主
wy8722106
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-10-9
结帖率:100%
已结贴  问题点数:3 回复次数:8 
关于指针偏移量。
#include "stdio.h"

char *c[]={
            "enter",
            "new",
            "point",
            "first"};
char **cp[]={c+3,c+2,c+1,c};
char ***cpp=cp;

main()
{
    printf("%s\n",**++cpp);
    printf("%s\n",*--*++cpp+3);
    printf("%s\n",*cpp[-2]);

    system("pause");

}

这个程序里“printf("%s\n",*cpp[-2]);” 中的负2,怎么理解?说是偏移量,怎么个偏移法?
大虾们,不好意思分不多了。呵呵!
搜索更多相关主题的帖子: 指针 偏移 
2010-12-06 17:35
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:3 
偏移是吧  指针的偏移是根据指针所指向的数据类型
的大小来确定的
有下面的这个公式   指针的偏移量=指针的当前值+n*sizeof(指针指向的数据类型)
减法和加法一样  就是把+换成-  
上面的那个cpp[-2] 就是相当于把cpp指针的值减去  2*sizeof(指针所指向的类型)
这里的cpp是三级指针   他指向的类型是指向char类型数据的指针的指针  所以sizeof(指针所指向的类型)
应该是4(一个指针在内存中站4个字节)

                                         
===========深入<----------------->浅出============
2010-12-06 18:08
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
得分:0 
太复杂了 看不懂啊,那这个输出为什么会是这样啊

我是初学者
2010-12-06 18:29
j109954048
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-12-6
得分:0 
新手学习 看不懂~~~~~~
2010-12-06 18:51
xingchi523
Rank: 2
等 级:论坛游民
帖 子:34
专家分:11
注 册:2010-11-6
得分:0 

我觉得画个内存图看起来就省事多了,再根据图移动指针比较好理解,cpp[-2]即向前移动
希望对你有用
2010-12-06 19:36
tfxanxing
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:82
专家分:165
注 册:2010-5-7
得分:0 
天哪,画了图的更看不懂,还是2楼的专业点!顶
2010-12-06 20:02
xingchi523
Rank: 2
等 级:论坛游民
帖 子:34
专家分:11
注 册:2010-11-6
得分:0 
画个内存图对指针移动比较易于观察,当然水平高了后心里想就行了
2010-12-06 20:20
xshy2051
Rank: 2
等 级:论坛游民
帖 子:27
专家分:33
注 册:2010-9-16
得分:0 
新手,看不懂!求指教…
2010-12-07 08:57
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
得分:0 
有人能解释下为什么结果是
point
er
first
么?

我是初学者
2010-12-07 09:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-328118-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.861604 second(s), 9 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved