C 如何通过指针访问全局定义的typedef结构?

C 如何通过指针访问全局定义的typedef结构?,c,pointers,struct,typedef,C,Pointers,Struct,Typedef,我想知道如何在typedef结构所在的文件之外使用它。我的意思是,我有: 在一个名为“rtc_i2c.c”的文件中------------------------------------ #include "rtc_i2c.h" struct time_date_str { char year; char month; char date; char day; char hour; char minute; char second; }; int RTCGet

我想知道如何在typedef结构所在的文件之外使用它。我的意思是,我有:

在一个名为“rtc_i2c.c”的文件中------------------------------------

#include "rtc_i2c.h"

struct time_date_str
{
  char year;
  char month;
  char date;
  char day;

  char hour;
  char minute;
  char second;
};


int RTCGetTime(TimeDate *timdatstrptr)
{
  timdatstrptr -> second = 0x12;

  return 0;
}
#ifndef RTC_I2C_H 
#define RTC_I2C_H 

typedef struct time_date_str TimeDate;

#endif
#include "rtc_i2c.h"

TimeBase *TimeDateData;

void main(void)
{
  char DateTimeASCII[20]; 

  RTCGetTime(TimeDateData);

  DateTimeASCII[0] = ????????
}
然后在一个名为“rtc_i2c.h”的文件中-------------------------------

#include "rtc_i2c.h"

struct time_date_str
{
  char year;
  char month;
  char date;
  char day;

  char hour;
  char minute;
  char second;
};


int RTCGetTime(TimeDate *timdatstrptr)
{
  timdatstrptr -> second = 0x12;

  return 0;
}
#ifndef RTC_I2C_H 
#define RTC_I2C_H 

typedef struct time_date_str TimeDate;

#endif
#include "rtc_i2c.h"

TimeBase *TimeDateData;

void main(void)
{
  char DateTimeASCII[20]; 

  RTCGetTime(TimeDateData);

  DateTimeASCII[0] = ????????
}
在“main.c”中我有-------------------------------------------------

#include "rtc_i2c.h"

struct time_date_str
{
  char year;
  char month;
  char date;
  char day;

  char hour;
  char minute;
  char second;
};


int RTCGetTime(TimeDate *timdatstrptr)
{
  timdatstrptr -> second = 0x12;

  return 0;
}
#ifndef RTC_I2C_H 
#define RTC_I2C_H 

typedef struct time_date_str TimeDate;

#endif
#include "rtc_i2c.h"

TimeBase *TimeDateData;

void main(void)
{
  char DateTimeASCII[20]; 

  RTCGetTime(TimeDateData);

  DateTimeASCII[0] = ????????
}
然后,当我进入我的代码时,我输入了RTCGetTime,在一个监视窗口中,我可以看到“timdatstrptr->second=12”赋值正在正确执行。但问题出在外部。如果我将“TimeDateData-->second”放在带“”的空格中,编译器将生成一个错误????????。所以我不知道如何通过指针访问全局定义数组的内容

如果我理解的话,声明为“TimeBase*TimeDateData”的指针指向我的数组,并使用“->”进行访问,因为它是一个指针。我错了吗?这是怎么回事


有人能帮我吗?谢谢

编译器不知道
time\u date\u str
的详细信息。您有两种选择:

  • struct time\u date\u str
    声明移动到头文件中
  • rtc_i2c.c
这一切归结为一个问题:外部实体是否应该知道这个结构的细节


还有其他问题,包括传递一个未初始化的指针到
RTCGetTime

你不应该在它所在的文件之外使用该结构,这就是为什么它位于文件
rtc_i2c.c
中,而不是
rtc_i2c.h
中。试着找到其他方法来完成你所需要的

例如,我猜
RTCGetTime
的声明也出现在
rtc_i2c.h
中的某个位置,这就是为什么您可以在另一个文件(
main.c
)中使用它的原因。那么,在
rtc_i2c.h
中寻找其他有用的函数,也许有一些可以使用的功能

如果绝对不能这样做,只需将结构的定义移动到头文件:

#ifndef RTC_I2C_H 
#define RTC_I2C_H 

struct time_date_str
{
  char year;
  char month;
  char date;
  char day;

  char hour;
  char minute;
  char second;
};

typedef struct time_date_str TimeDate;

#endif

@cnincutalyes所有外部实体都应该可以访问此结构。我已经将结构移到了.h文件中,但仍然无法编译。如果我将“DateTimeASCII[0]=TimeDateData-->秒;”@user1502121尝试使用一个普通变量,
TimeBase TimeDateData
,您可以像这样传递它:
RTGetTime(&TimeDateData)
@cnincutalyes,谢谢!这就解决了问题。我将“TimeBase*TimeDateData”改为“TimeBase TimeDateData”,并像“&TimeDateData”一样传递,结果成功了