这样为什么不行

[复制链接]
 楼主| 发表于 2008-11-1 16:45 | 显示全部楼层 |阅读模式
typedef struct{
    char number;
    char pi;
    char po;
    char buffer[16];
}UART_BUFFER;

x = sizeof(UART_BUFFER.buffer); // 不行
x = sizeof(UART_BUFFER);        // 可以
发表于 2008-11-1 16:58 | 显示全部楼层

我的看法

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

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

x=sizeof(a.buffer); //这样就可以了
 楼主| 发表于 2008-11-1 17:02 | 显示全部楼层

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

但它确可以.
发表于 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);
        }
}
//----------------------------------------------------------------------------
发表于 2008-11-1 17:04 | 显示全部楼层

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

估计你那个行的也不是正确的值的,或者就是正确的值但也是有弊病的不规范写法。
 楼主| 发表于 2008-11-1 17:15 | 显示全部楼层

你们说的用法我当然知道

以前我也一直使用声明的结构方式,只是结构里面没有数组之类的数据结构,一直是可以的,后来的方式不可以,我觉得有点奇怪.
这些都是在KEIL里用的,KEIL好象是有些不一样,
比如 char _delay;和char delay;是一样的.当然一般编译器建议不要在最前面加"_".
发表于 2008-11-1 18:06 | 显示全部楼层

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

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

UART_BUFFER不是变量,它是一个类型的名字,就如同int、char是一样的,所以可以使用sizeof(UART_BUFFER),与sizeof(int)没有什么两样。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

222

主题

15489

帖子

34

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