如何将const uint8_t*const转换为bool
这里,我需要将const如何将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
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;