C.中(uintptr_t)和(uint8_t*)之间的差异



(uintptr_t(和(uint8_t*(之间有区别吗?哪个更便携?

根据用途,它们可以互换使用吗?

uintptr_t是一个无符号整数,大到足以包含void *,除函数指针外,任何指针都可以转换为CCD_2。

3是指向CCD_ 4的指针。

你问我是否有什么不同,但我很难找到任何有意义的相似之处。就像夜晚和日历一样不同。

我会说{signed,unsigned,} char*,因为严格来说,uint8_tuintptr_t都不能保证定义。

然而,char_type *不能与uintptr_t互换。虽然您可以使用char_type *来指向对象的字节,但您可以用uintptr_t执行wilder指针运算,因为如果您最终指向错误的位置,就不一定会出现未定义的行为情况。

例如:

#include <stdio.h>
#include <stdint.h>
int main(){
char a[]={11,22,33};
//for(char *p=a+2; p!=a-1;--p)
//  printf("%dn", *p); //undefined reverse iteration: can't point to &a[-1]
for(uintptr_t p=(uintptr_t)(a+2); p!=(uintptr_t)a-1;--p) 
printf("%dn", *(char*)p); //OK; (uintptr_t)&a[0] - 1 is just a number
}

相关内容

  • 没有找到相关文章

最新更新