打印
[嵌入式linux]

请问:数组的指针 如何指向结构体中的成员?

[复制链接]
2502|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
herocsz|  楼主 | 2009-4-17 14:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题如下:
我定义了一个结构体和一个数组:
unsigned int buf[256]={......}; //省略号代表里面的内容

typedef struct{
    unsigned int    head;            
    unsigned int    name;            
    unsigned int    version;                
}PACKED    S_FORMAT,    *PS_FORMAT;

再定义两个指针:
unsigned int  *ps;
PS_FORMAT  *ptr;

然后进行操作:
ps=buf;
ptr->head = ps;
ptr->name = ps+1
ptr->version = ps+2;

编译的时候总是warning:assignment makes integer from pointer without a cast.
请问这是什么原因?该如何修改?


我感觉好像是类型不匹配什么的?

相关帖子

沙发
xwj| | 2009-4-17 14:26 | 只看该作者

唉。。。问题多多

1、野指针;
2、使用指针要用*

LZ还是先去看书吧,一遍看不懂就多看几遍

使用特权

评论回复
板凳
herocsz|  楼主 | 2009-4-17 14:30 | 只看该作者

问题所在?

楼上的,能否直接说问题,书已经看的够多了,找不出问题才来提问的

使用特权

评论回复
地板
herocsz|  楼主 | 2009-4-17 14:40 | 只看该作者

是类型问题,跟*没关系

是类型问题,跟*没关系

使用特权

评论回复
5
computer00| | 2009-4-17 15:39 | 只看该作者

先要实例化一个结构体,不然光一个指针没啥用。

typedef struct{
    unsigned int    head;            
    unsigned int    name;            
    unsigned int    version;                
}PACKED    S_FORMAT,    *PS_FORMAT;

unsigned int  *ps;
PS_FORMAT  *ptr;

S_FORMAT MyFormat;  //实例化一个MyFormat

ptr=&MyFormat;
ps=buf;
ptr->head = (unsigned int)ps; //变量类型不匹配,需要强制转换
ptr->name = (unsigned int)(ps+1);
ptr->version = (unsigned int)(ps+2);



搞不清楚你要数组的地址还是里面的值……上面写的是把地址赋给它,如果要里面的值,则可以写成:

MyFormat.head=buf[0];
MyFormat.mame=buf[1];
MyFormat.version=buf[2];

使用特权

评论回复
6
xwj| | 2009-4-17 15:47 | 只看该作者

唉,叫你看书就去看书!

一个个字的咬文嚼字!!!




聪明的人、或认真的人,看一次就够了,
但你这脑袋和态度...



PS:
蛋蛋不要误导新人,正确的声明和运用指针的话,根本就不需要强制转换
否则就沦为玩弄技巧了

使用特权

评论回复
7
zusen| | 2009-4-19 00:23 | 只看该作者

定义一个指针,并不会给这个指针分配内存空间的

象00这样修改,应该没问题了

使用特权

评论回复
8
flanker| | 2009-4-19 18:36 | 只看该作者

先用(void *)转成空类型指针,就可以随便转了

不这样的话,PC-Lint检查工具会告警

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

142

帖子

0

粉丝