【发布时间】:2017-11-20 16:31:58
【问题描述】:
我正在编写一个与此代码类似的单元测试,并且我正在尝试在设置值时测试我的值,以便我知道发生了什么。当我运行以下代码时,我不明白为什么 ptr 值没有设置为 1。相反,当我运行它时,它会输出 10、64、0、0。
任何解释或建议将不胜感激!
#include <stdio.h>
#include <stdbool.h>
typedef struct
{
bool bOne;
bool bTwo;
bool bThree;
bool bFour;
} items;
int main()
{
items item;
item.bOne = 0;
bool *ptr = &(item.bOne);
for(int i = 0; i < sizeof(items)/sizeof(bool); i++)
{
*ptr = 1;
*ptr++;
printf("ptr value = %d\n", *ptr);
}
return 0;
}
【问题讨论】:
-
*ptr++;调用未定义的行为,因为它不指向数组。它还会增加ptr,它指向之后未初始化的内存。所以printf的输出是垃圾。 -
一方面,您的 printf 语句不正确,因为您使用了
%d,它需要int,但您传递给它的是bool。试试这个:printf("ptr value = %d\n", (int)*ptr); -
*ptr++;....?? “警告:未使用计算的值 [-Wunused-value]”。 -
你没有打印出刚刚初始化的成员。
-
1) 打开警告。 2) 阅读警告。