当然我可以做一些像
这样的事情sizeof (void *);
但是我觉得我读过一种仅用于通过ISO / IEC9899提供地址频谱的类型。
类似于ptrdiff_t
。
问题是,我使用的是va_list,并且不知道指针的类型。
所以我更喜欢一般的指针类型,而不是特定的int *
或char *
我的代码如下:
void param_exec (tmp, ...)
{
va_list vlArgList;
void *szArgLocation;
va_start (vlArgList, tmp);
szArgLocation = va_arg (vlArgList, void *);
va_end(vlArgList);
return;
}
使用void*
感觉非常错误,但还有另一个更合适的类型吗?
有人能说出那种类型(如果有的话)吗?
答案 0 :(得分:3)
Ajay几乎把它钉死了。看看Important Data Types。对于用于表示对象大小的无符号整数类型的 减去两个指针和ptrdiff_t
的结果,您的选择为size_t
。唯一的另一个警告是:
兼容性注意:在ISO C出现之前的C实现通常使用unsigned int来表示对象大小和int 用于指针减法结果。他们没有必要定义 size_t或ptrdiff_t。 Unix系统确实定义了size_t,in sys / types.h,但定义通常是签名类型。
答案 1 :(得分:1)
sizeof
运算符的值应存储在size_t
类型的变量中。它用于确定对象或类型的大小(以字节为单位)。
答案 2 :(得分:1)
如果你知道你期望一个指针,但你不知道它指向的是什么,请使用void*
。这恰恰是void*
用于传递黑盒子指针的地方,用户代码应该确保它有意义。
关于指针的大小,你可以将它存储在所有东西中。目前,指针的大小是4或8,并且它将需要几个世纪才达到256.因此,即使使用单个字节来存储大小也足够长时间。