【发布时间】:2020-04-21 11:55:56
【问题描述】:
我正在处理其他人开发的一段代码,并且我正在尝试使结构静态化。但是在调试时,指针似乎为零(不是指向零的变量):
typedef struct WiFiIP{
// Keep the following in order! (pri,sec)
uint16_t WiFiPrimaryPort;
uint16_t WiFiSecondaryPort;
// Keep the following in order! (pri,sec,sntp)
char WiFiPrimaryAddress[32];
char WiFiSecondaryIpAddress[32];
char WiFiSntpIpAddress[32];
};
static const struct WiFiIP WiFiIPs = {7781,7781,"10.0.0.1","",""};
static const __typeof__ (WiFiIPs.WiFiPrimaryPort)
* const PortPtr = &WiFiIPs.WiFiPrimaryPort;
static const __typeof__(WiFiIPs.WiFiPrimaryAddress)
*AddressPtr = &WiFiIPs.WiFiPrimaryAddress;
所以AddressPtr 和PortPtr 都是0x0。
我知道还有许多其他方法可以在代码中“硬编码”参数,但在这种情况下,现有代码需要一个指向结构的指针,我想避免重构。
请温柔一点,我从来不擅长指针,而且我知道有很多关于指针的文献。我已经搜索并遵循了许多示例,但无法使其正常工作。
此代码正在为 cortex-m3 处理器开发
【问题讨论】:
-
这两个变量都应该是非空的。可能还有其他事情发生。请使用minimal reproducible example 更新您的问题,以证明问题。
-
"所以 AddressPtr 和 PortPtr 都是 0x0。"没有,你用什么调试器?
-
我讨厌那种强迫每个 C 学生在喉咙里写上
typedef的教育系统,即使它什么也没做。 -
优化器不是可能内联常量吗?那么指针为空就有意义了。
-
@LouisCloete 你是对的,当我按照代码进行操作时,似乎指针正在被优化为内联。所以这个问题是一个红鲱鱼。
标签: c pointers struct constants cortex-m3