Tag: void pointers

((void *)-1)是一个有效的地址吗?

来自man shmat逐字: 返回值 返回错误(void *)-1,并设置errno以指示错误原因。 (POSIX使用略有不同的措辞来讲述相同的内容。) 是否有任何强制性规则或定义(标准?) (void *) -1可能不是有效地址?

void指针:C和C ++之间的区别

我试图理解C和C ++之间关于void指针的区别。 以下用C语言编译但不用C ++编译(用gcc / g ++ -ansi -pedantic -Wall完成的所有编译): int* p = malloc(sizeof(int)); 因为malloc返回void* ,C允许分配给int*而C允许这样做。 但是,这里: void foo(void* vptr) { } int main() { int* p = (int*) malloc(sizeof(int)); foo(p); return 0; } C ++和C都编译它没有抱怨。 为什么? K&R2说: 任何指向对象的指针都可以转换为void *类型而不会丢失信息。 如果结果转换回原始指针类型,则恢复原始指针。 这很好地总结了C中的void*转换.C ++标准规定了什么?

使用intptr_t而不是void *?

使用intptr_t作为通用存储(保存指针和整数值)而不是void*是一个好主意吗? (如下所示: http : //www.crystalspace3d.org/docs/online/manual/Api1_005f0-64_002dBit-Portability-Changes.html ) 对于我已经读过的内容: int – > void* – > int roundtrip不保证保持原始值; 我猜int – > intptr_t – > int会做 void*和intptr_t上的指针算术需要强制转换,所以没有人在这里获得优势 void*表示存储指针时显式转换次数较少, intptr_t表示存储整数值时转换次数较少 intptr_t需要C99 还有什么我应该考虑的?