C 如何通过指针访问全局定义的typedef结构?
我想知道如何在typedef结构所在的文件之外使用它。我的意思是,我有: 在一个名为“rtc_i2c.c”的文件中------------------------------------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
#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”一样传递,结果成功了