C中指针的大小
Size of a pointer in C
如何找到类型的大小 "pointer?"
例如,如果我想知道一个整数的大小,我可以使用 "sizeof(int)"。指针的等价物是什么?
是否可以在不初始化指针的情况下执行此操作?
尝试使用普通的、无类型的 void pointer,如下所示:
size_t sz = sizeof(void *);
请注意,指针的大小(如整数的大小)对于您的程序可能编译的所有体系结构都不相同。
"pointer" 不是类型。它可以是类型的一部分。 "Pointer to int" 将是一个类型的示例,您可以通过编写 sizeof(int *)
.
来找到它的大小
不同类型的指针可能有不同的大小,尽管在现代硬件上它们通常都是一样的。
sizeof(void*)
通常会在您的体系结构上产生指针的大小,尽管可能存在指向特定类型的指针更小的体系结构 - 因为 void *
保证允许到任何类型的完整往返数据指针 (C99 §6.3.2.3 ¶1),它应该肯定大于或等于所有其他数据指针。
指向函数的指针是完全不同的野兽,它可能比普通的 void *
需要更多 space(想想微控制器,代码和数据可能驻留在完全不同的地址 space秒)。在这里,您可以通过 sizeof(void (*)())
、 之类的东西了解情况,尽管 IIRC 没有什么可以阻止特定实现对每个函数指针类型具有不同的大小 实际上,C99 § 6.3.2.3 ¶8 要求函数指针必须在通过任何其他函数指针类型的往返过程中幸存下来,所以我想使用任何函数指针类型来探测函数指针大小都是安全的,就像 void *
是一个很好的方法测量数据指针大小。
如何找到类型的大小 "pointer?" 例如,如果我想知道一个整数的大小,我可以使用 "sizeof(int)"。指针的等价物是什么? 是否可以在不初始化指针的情况下执行此操作?
尝试使用普通的、无类型的 void pointer,如下所示:
size_t sz = sizeof(void *);
请注意,指针的大小(如整数的大小)对于您的程序可能编译的所有体系结构都不相同。
"pointer" 不是类型。它可以是类型的一部分。 "Pointer to int" 将是一个类型的示例,您可以通过编写 sizeof(int *)
.
不同类型的指针可能有不同的大小,尽管在现代硬件上它们通常都是一样的。
sizeof(void*)
通常会在您的体系结构上产生指针的大小,尽管可能存在指向特定类型的指针更小的体系结构 - 因为 void *
保证允许到任何类型的完整往返数据指针 (C99 §6.3.2.3 ¶1),它应该肯定大于或等于所有其他数据指针。
指向函数的指针是完全不同的野兽,它可能比普通的 void *
需要更多 space(想想微控制器,代码和数据可能驻留在完全不同的地址 space秒)。在这里,您可以通过 sizeof(void (*)())
、 之类的东西了解情况,尽管 IIRC 没有什么可以阻止特定实现对每个函数指针类型具有不同的大小 实际上,C99 § 6.3.2.3 ¶8 要求函数指针必须在通过任何其他函数指针类型的往返过程中幸存下来,所以我想使用任何函数指针类型来探测函数指针大小都是安全的,就像 void *
是一个很好的方法测量数据指针大小。