哪一行是定义指针的正确(最佳)方式?我应该使用哪种类型的指针? ptrdiff_t或void *?
typedef ptrdiff_t pointer; // pointers are ptrdiff_t.
-- or --
typedef void* pointer; // pointers are void*.
pointer ptr = malloc(1024);
哪一行是定义指针的正确(最佳)方式?我应该使用哪种类型的指针? ptrdiff_t或void *?
typedef ptrdiff_t pointer; // pointers are ptrdiff_t.
-- or --
typedef void* pointer; // pointers are void*.
pointer ptr = malloc(1024);
指针在C是T*
其中T
是类型指向类型; void*
是泛型指针类型。通常,你让C隐含地将void*
转换为有用的东西,例如
char *buffer = malloc(1024);
ptrdiff_t
是由两个指针,例如的减法返回的类型
ptrdiff_t d = write_ptr - buffer;
// now you know the write_ptr is d bytes beyond the start of the buffer
ptrdiff_t
是一个整数类型,不是指针类型;你不能在其上使用间接运算符*
。 (顺便说一句,你也不能在void*
上有效地使用它。)
如果你想存储一个整型指针,uintptr_t
本来是合适的。
声明指针的最好方式是
T *ptr;
其中T
是被指向到基本类型 - int
,char
,struct foo
,不管。 malloc
返回void *
,这是隐式转换为目标指针类型,因此所有的以下的同样有效:
char *str = malloc(512); // allocates space for 512 chars
int *arr = malloc(sizeof *arr * 512); // allocates space for 512 ints
struct foo *farr = malloc(sizeof *farr * 512); // allocates space for 512 struct foos
int (*arr2)[10] = malloc (sizeof *arr2 * 512); // allocates space for 512x10 ints
等等等等等等
没有单指针C中的数据类型;有多个“指向T
”的数据类型。指针运算取决于基类型; str + 1
将从arr + 1
产生不同的值,这将farr + 1
产生不同的值等void *
是“通用的”指针类型,但你不知道想使用通用指针的一切。
不要将指针类型隐藏在typedefs后面,除非指针类型意味着不透明并且从不解除引用,即使这样通常也是一个坏主意。
+1对于最后一个段落 – 2012-04-11 15:20:45
'void * ptr = malloc(1024);':) – Joe 2012-04-11 15:01:10