正确的类型来表示C中指针的大小?

时间:2014-06-12 06:23:53

标签: c c99

当然我可以做一些像

这样的事情
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*感觉非常错误,但还有另一个更合适的类型吗?

有人能说出那种类型(如果有的话)吗?

3 个答案:

答案 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.因此,即使使用单个字节来存储大小也足够长时间。