发新帖我要提问
12
返回列表
打印
[STM8]

请大家帮忙看看这种结构体指针定义使用有什么问题

[复制链接]
楼主: wqz
手机看帖
扫描二维码
随时随地手机跟帖
21
wqz|  楼主 | 2013-12-6 22:39 | 只看该作者 回帖奖励 |倒序浏览

我还是把这页后面的页贴上来吧!

使用特权

评论回复
22
wqz|  楼主 | 2013-12-6 22:41 | 只看该作者
所以我在1楼时就说明了编译工具

使用特权

评论回复
23
戈卫东| | 2013-12-6 22:44 | 只看该作者
pStu=&Testl;
你这行的赋值语句是在全局域么?
把它放到函数里面是没有问题的.
可执行语句只允许放到函数里面的....

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
wqz + 6
24
wqz|  楼主 | 2013-12-6 22:49 | 只看该作者
本帖最后由 wqz 于 2013-12-6 22:52 编辑
戈卫东 发表于 2013-12-6 22:44
pStu=&Testl;
你这行的赋值语句是在全局域么?
把它放到函数里面是没有问题的.

确实是这个问题!
移到函数里就OK了!

谢谢!

使用特权

评论回复
25
sinanjj| | 2013-12-6 23:55 | 只看该作者
:L

使用特权

评论回复
26
xyz549040622| | 2013-12-7 05:44 | 只看该作者
难道是编译器的问题?

使用特权

评论回复
27
chenbb8| | 2013-12-7 08:40 | 只看该作者
feilusia 发表于 2013-12-6 16:21
这两句
struct stuTest *pStu;
pStu=&Testl;

结构体不是数组,结构体名和变量名一个级别,而不是指针……

使用特权

评论回复
28
feilusia| | 2013-12-7 08:51 | 只看该作者
wqz 发表于 2013-12-6 22:49
确实是这个问题!
移到函数里就OK了!

那不然你把这句放在哪里

使用特权

评论回复
29
feilusia| | 2013-12-7 08:56 | 只看该作者
chenbb8 发表于 2013-12-7 08:40
结构体不是数组,结构体名和变量名一个级别,而不是指针……

那句我漏了个struct,应该是要struct stuTest *pStu = (struct stuTest *)Testl ;
这句会有什么问题呢,求指教。

使用特权

评论回复
30
m564522634| | 2013-12-7 11:45 | 只看该作者
看起来没什么问题了,这个你就要看下编译器的帮助文档了

使用特权

评论回复
31
m564522634| | 2013-12-7 11:51 | 只看该作者
两个声明都没什么问题了,C和指针上说的是两个匿名的结构休,我觉得你定义成下面这样试下
typedef struct {
   unsigned char  stu1[10];
   unsigned char  stu2[11];      
   unsigned char  stu3[5];
   unsigned char  stu4[5];
}stuTest;   

stuTest Testl;
stuTest *pStu;
pStu=&Testl;
试下还是不行的话就是不这里的问题,你看下你的调用和声明有没有什么问题。在不行的话编译器看下吧  。语法上是没有什么问题了

使用特权

评论回复
32
chenbb8| | 2013-12-7 13:49 | 只看该作者
feilusia 发表于 2013-12-7 08:56
那句我漏了个struct,应该是要struct stuTest *pStu = (struct stuTest *)Testl ;
这句会有什么问题呢, ...

你的用法就是将一个变量当成一个指针来用一样:shutup:
少了一个&


使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
wqz + 6
33
feilusia| | 2013-12-7 14:22 | 只看该作者
chenbb8 发表于 2013-12-7 13:49
你的用法就是将一个变量当成一个指针来用一样
少了一个&

我误把结构体变量TEST1当做结构体指针了,谢谢你的提醒。

使用特权

评论回复
34
O狂且O| | 2013-12-7 15:21 | 只看该作者
这个应该和编译器规定有关. 奇葩了.  
反正你那么写也不是个好习惯, 干脆就这么写吧:
struct stuTest Testl;
struct stuTest *pStu = &Test;
应该没错了.

使用特权

评论回复
35
sxhhhjicbb| | 2013-12-7 17:46 | 只看该作者
8位MCU,常要指向存储类型的.特别是对结构体.你试试查看一下,有有不有存储类型要求.

使用特权

评论回复
36
ayb_ice| | 2013-12-11 09:35 | 只看该作者
最后一句必须放在函数体内部

使用特权

评论回复
37
Nick_Qiu| | 2013-12-11 12:26 | 只看该作者
本帖最后由 Nick_Qiu 于 2013-12-11 12:28 编辑

struct stuTest{
   unsigned char  stu1[10];
   unsigned char  stu2[11];
   unsigned char  stu3[5];
   unsigned char  stu4[5];
};
struct stuTest Testl;
struct stuTest *pStu;


int main(void)
{
    pStu=&Testl;
}
IAR FOR ARM 6 编译通过;无报错;

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
wqz + 6
38
msblast| | 2013-12-11 13:00 | 只看该作者
Nick_Qiu 发表于 2013-12-11 12:26
struct stuTest{
   unsigned char  stu1[10];
   unsigned char  stu2[11];

我估计LZ应该是这样
struct stuTest{
   unsigned char  stu1[10];
   unsigned char  stu2[11];
   unsigned char  stu3[5];
   unsigned char  stu4[5];
};
struct stuTest Testl;
struct stuTest *pStu;

pStu=&Testl;

两种解决办法
1、就像楼上的那样在函数体里执行pStu=&Testl;
2、像前面某个哥们写的struct stuTest *pStu = &Testl;变量声明时初始化

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
wqz + 6
39
msblast| | 2013-12-11 13:02 | 只看该作者
msblast 发表于 2013-12-11 13:00
我估计LZ应该是这样
struct stuTest{
   unsigned char  stu1[10];

与编译器无关

使用特权

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

本版积分规则