搜索
bottom↓
回复: 13

关于指针下标问题,跪求高手

[复制链接]

出0入0汤圆

发表于 2010-11-29 23:06:23 | 显示全部楼层 |阅读模式
struct simple
{
    int a;
    int b;
    int c;
};

struct complicate
{
    int d;
    int e;
    int f;
    int g:
    char f;

};

struct simple *mylove;
struct complicate *this;
this = (struct complicate *)(&mylove[1]);   /*怎么理解*/
指针的下标移动一位??表示????
跪求高手??

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-11-29 23:48:25 | 显示全部楼层
结构体指针强制转换啊。
数组下标跟指针下标类试,这样写只是个人习惯,
我认为就是mylove指针后的的一个struct simple类型指针强制转换成struct complicate类型并赋给this。

出0入0汤圆

 楼主| 发表于 2010-11-30 10:24:20 | 显示全部楼层
回复【1楼】lalapunk1983
-----------------------------------------------------------------------

楼上说的,不对啊,怎么会struct simple类型指针强制转换成struct complicate,强制转换的是指针。。。

出0入0汤圆

发表于 2010-11-30 10:27:35 | 显示全部楼层
struct simple类型指针强制转换成struct complicate类型(指针)
不要扣语法啊。我语文底子差。
括号的字一定要加上才懂吗?

出0入0汤圆

发表于 2010-11-30 10:34:04 | 显示全部楼层
可能有一个simple和一个complicate刚好是连续存储的,这样做可以通过指向simple的指针来定位指向complicate的指针

出0入0汤圆

 楼主| 发表于 2010-11-30 10:40:38 | 显示全部楼层
回复【4楼】usingavr
-----------------------------------------------------------------------

这个介绍有点感觉了,估计程序就希望两个结构体在内存中是连续储存的。complicate紧跟simple的后面。

出0入0汤圆

 楼主| 发表于 2010-11-30 10:42:57 | 显示全部楼层
回复【3楼】lalapunk1983
-----------------------------------------------------------------------
(&mylove[1])关键是这个啊,   lalapunk1983能否解释的易懂点。

出0入0汤圆

发表于 2010-11-30 10:48:40 | 显示全部楼层
&mylove[1] 相当于指向 mylove + sizeof(simple),指向mylove之后

出0入0汤圆

发表于 2010-11-30 10:49:29 | 显示全部楼层
就是把mylove所指处的一个simple所占的空间之后的地址强制赋给为complicate的指针嘛。
执行完了之后complicate的指针就指向紧接着这个simple之后的那个位置。

出0入0汤圆

发表于 2010-11-30 10:50:21 | 显示全部楼层
typedef struct simple
{
    int a;
    int b;
    int c;
}SIMPLE;

typedef struct complicate
{
    int d;
    int e;
    int f;  
    int g:
    char f;

}COMPLICATE;

COMPLICATE *this;
SIMPLE mylove[5];

this = (struct complicate *)(&mylove[1]);

这样应该明白了吧,如果他没定义mylove数组的话编译会不会报错我就不清楚了。

自己可以随便写点数据然后软仿下看看情况就知道了。

出0入0汤圆

发表于 2010-11-30 11:04:05 | 显示全部楼层
struct simple
{
    int a;
    int b;
    int c;
};

struct complicate
{
    int d;
    int e;
    int f;  
    int g:
    char f;

};

struct simple *mylove;
struct complicate *this;
this = (struct complicate *)(&mylove[1]);

我的理解 应该是指向simple数组 int b;开始的地址

出0入0汤圆

 楼主| 发表于 2010-11-30 11:51:57 | 显示全部楼层
回复【10楼】zjwznlz 泥鳅
-----------------------------------------------------------------------

老兄,你说this指向向simple数组 int b;开始的地址

我看明显不对嘛,,

出0入0汤圆

发表于 2010-11-30 12:00:18 | 显示全部楼层
9楼说的对

出0入0汤圆

发表于 2010-12-1 16:19:58 | 显示全部楼层
this 将指向 mylove[1]的起始地址
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 01:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表