如何将const uint8_t*const转换为bool

如何将const uint8_t*const转换为bool,c,pointers,type-conversion,boolean,C,Pointers,Type Conversion,Boolean,这里,我需要将constuint8_t*const类型的指针转换为bool。 我该怎么做?问题是: const uint8_t * const val; int num = 5; const bool res = (val && (num>0)); 它是一个指向const uint8\t的const指针,因此您必须使它指向一些有效内存,通常是const变量/值,或者去掉const属性 如果启用了警告,编译器将对此语句生成警告: const uint8_t * const

这里,我需要将const
uint8_t*const
类型的指针转换为
bool
。 我该怎么做?

问题是:

const uint8_t * const val;
int num = 5;
const bool res = (val && (num>0));
它是一个指向
const uint8\t
const指针,因此您必须使它指向一些有效内存,通常是
const
变量/值,或者去掉
const
属性

如果启用了警告,编译器将对此语句生成警告:

const uint8_t * const val;
因为,
val
未初始化。在您的例子中,编译器在这里抱怨,因为它是未定义的行为。但是,我知道问题不在于为什么或者如何是一个未定义行为的案例,所以我们不要进入其中

请参阅下面的代码:

const bool res = (val && (num>0));
正如预期的那样:
'A'
+
0x05
0x46


注意:您可以养成编译代码时启用所有警告的习惯。拿出一些空闲时间来读书。在此之前,您需要的是
-wall
或更好的
-werror

如果您在编译代码时启用了警告,您将获得:

0x46
这是因为您声明了指针,但没有初始化它,这里:

warning: 'val' is used uninitialized in this function [-Wuninitialized]
    const bool res = (val && (num>0));
                     ~~~~~^~~~~~~~~~~
将其初始化为值,例如:

const uint8_t * const val;

如何将
const uint8\u t*const
转换为
bool

不管你有什么
const
关键字,你都需要关注你有一个指针这一事实


所有指针都可以隐式地转换为布尔值(因此也可以转换为布尔值),这意味着您不必做更多的事情,您的代码将完成这项任务(现在您已经初始化了
val
)。

val
是一个常量指针,因此您必须初始化它(使它指向某个地方)定义变量时。完成此操作后,所有指针都将隐式转换为布尔值,只有空指针为false。因此,您所拥有的(除了缺少指针初始化)将如您所期望的那样工作(我认为)。布尔上下文中指针的常见解释是询问“指针指向某个对象吗?(true)还是空指针(false)?”。这就是你的意思吗?typedefs怎么了?这些类型包括在
stdint.h
stdbool.h
中。我想让OP明白,这同样适用于所有数据类型,包括用户定义的数据类型。
const uint8_t * const val;
uint8_t v = 5; // example value
const uint8_t * const val = &v;