使用 size_t 进行空指针模拟
Using size_t for void pointer emulation
int bar(const size_t value) {
char *d = (char*) value;
*d = 'B';
}
int main() {
char bar = 'A';
bar((size_t)&d);
}
使用size_t
模拟空指针类型是否合法?为什么?
它有什么benefits/drawbacks?
对于数据指针,从指针到整数类型返回到原始指针类型的往返行程定义明确,只要整数类型的宽度足以容纳指针而不会丢失。
size_t
已定义为保存对象大小。它们通常足够大以容纳指针表示,但这并不能保证,而且它们是假设不成立的实现。
uintptr_t
和 intptr_t
是整数类型,定义为足够宽以容纳指针而不会丢失。
对于函数指针,我知道没有这样的保证。
int bar(const size_t value) {
char *d = (char*) value;
*d = 'B';
}
int main() {
char bar = 'A';
bar((size_t)&d);
}
使用
size_t
模拟空指针类型是否合法?为什么?它有什么benefits/drawbacks?
对于数据指针,从指针到整数类型返回到原始指针类型的往返行程定义明确,只要整数类型的宽度足以容纳指针而不会丢失。
size_t
已定义为保存对象大小。它们通常足够大以容纳指针表示,但这并不能保证,而且它们是假设不成立的实现。
uintptr_t
和 intptr_t
是整数类型,定义为足够宽以容纳指针而不会丢失。
对于函数指针,我知道没有这样的保证。