(uintptr_t(和(uint8_t*(之间有区别吗?哪个更便携?
根据用途,它们可以互换使用吗?
uintptr_t
是一个无符号整数,大到足以包含void *
,除函数指针外,任何指针都可以转换为CCD_2。
3是指向CCD_ 4的指针。
你问我是否有什么不同,但我很难找到任何有意义的相似之处。就像夜晚和日历一样不同。
我会说{signed,unsigned,} char*
,因为严格来说,uint8_t
和uintptr_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
}