打印

这样为什么不行

[复制链接]
1331|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ayb_ice|  楼主 | 2008-11-1 16:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
lag3631| | 2008-11-1 16:58 | 只看该作者

我的看法

因为UART_BUFFER并不是一个实际分配内存的变量,所以它的内部数据并未分配内存地址,因而不能访问。

如果要访问buffer的话,可以这样
UART_BUFFER a;

x=sizeof(a.buffer); //这样就可以了

使用特权

评论回复
板凳
ayb_ice|  楼主 | 2008-11-1 17:02 | 只看该作者

后面的也没有分配实际地址

但它确可以.

使用特权

评论回复
地板
yewuyi| | 2008-11-1 17:02 | 只看该作者

这样看看行不行?

//----------------------------------------------------------------------------
#include             "main.h"
extern               void                 InitSys(void);

typedef struct {
    char number;
    char pi;
    char po;
    char buffer[16];
}UART_BUFFER;
UART_BUFFER xxx;
//----------------------------------------------------------------------------
void                 main()
{
//InitSys();
while(1){
        uchar x,y;
        x = sizeof(xxx);
        x = sizeof(xxx.pi);
        }
}
//----------------------------------------------------------------------------

使用特权

评论回复
5
yewuyi| | 2008-11-1 17:04 | 只看该作者

呵呵,原来有了2楼的回答了。。。

估计你那个行的也不是正确的值的,或者就是正确的值但也是有弊病的不规范写法。

使用特权

评论回复
6
ayb_ice|  楼主 | 2008-11-1 17:15 | 只看该作者

你们说的用法我当然知道

以前我也一直使用声明的结构方式,只是结构里面没有数组之类的数据结构,一直是可以的,后来的方式不可以,我觉得有点奇怪.
这些都是在KEIL里用的,KEIL好象是有些不一样,
比如 char _delay;和char delay;是一样的.当然一般编译器建议不要在最前面加"_".

使用特权

评论回复
7
平常人| | 2008-11-1 18:06 | 只看该作者

sizeof(UART_BUFFER) 与 sizeof(int) 没有什么两样

2楼回答的后一半是对的,但前一半不对,“因为UART_BUFFER并不是一个实际分配内存的变量”

UART_BUFFER不是变量,它是一个类型的名字,就如同int、char是一样的,所以可以使用sizeof(UART_BUFFER),与sizeof(int)没有什么两样。

使用特权

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

本版积分规则

222

主题

15408

帖子

34

粉丝