我应该使用哪种类型的指针?ptrdiff_t还是void*?

Ami*_*yan 1 c pointers c89

哪一行是定义指针​​的正确(最佳)方式?

typedef ptrdiff_t pointer; // pointers are ptrdiff_t.

          -- or --

typedef void* pointer; // pointers are void*.


pointer ptr = malloc(1024);
Run Code Online (Sandbox Code Playgroud)

Fre*_*Foo 9

在C指针型的T*,其中T在所述类型指向; void*是通用指针类型.通常,你让C隐式转换void*为有用的东西,例如

char *buffer = malloc(1024);
Run Code Online (Sandbox Code Playgroud)

ptrdiff_t 是两个指针的减法返回的类型,例如

ptrdiff_t d = write_ptr - buffer;
// now you know the write_ptr is d bytes beyond the start of the buffer
Run Code Online (Sandbox Code Playgroud)

ptrdiff_t是一个整数类型,而不是指针类型; 你不能*在它上面使用间接运算符.(void*顺便说一句,你也无法在a上有意义地使用它.)

如果你想将指针存储在整数类型中,uintptr_t那就合适了.