不同数据类型的sizeof(datatype_pointer)/sizeof(datatype)值不同,原因何在
Different values of sizeof(datatype_pointer)/sizeof(datatype) for different datatypes, why?
我在C++程序中声明了以下结构:
struct person {
char name[10]; /* first name */
char id[10]; /* ID number */
off_t pos; /* position in file, for demonstration */
} people[] = {
{ "arnold", "123456789", 0 },
{ "miriam", "987654321", 10240 },
{ "joe", "192837465", 81920 },
};
j = sizeof(people) / sizeof(people[0]); /* count of elements */
这里给出j=3,即阵列中没有元素;即使你添加或减少元素。。。
但是
char b[8];
i = sizeof(b)/sizeof(b[0]);
在我的机器上给出了i=a常数=4的值。
现在这是合理的,因为在我的机器上,sizeof(char*)是常量,而sizeof(char)也是常量。。
但是,一旦我声明了结构体person,sizeof(person*)和sizeof(person)也应该是常量,它也应该产生一个常数值,不是吗???
您的编译器错误。
char b[8];
i = sizeof(b)/sizeof(b[0]);
应产生CCD_ 1。
您得到的struct
大小的结果是正确的。如果我是你,我会更换编译器。
如果您将b
传递给计算大小的函数,那么您是对的。但按照现在的代码,没有。
此外,如果是一个计算sizeof(people) / sizeof(people[0])
的函数,它接收people
作为参数,那么你也会得到一个常数。
这是因为数组在作为参数传递时会衰减为指针。
您确定您实际上是在将sizeof
应用于数组,而不是指针吗?
在这种情况下,函数参数实际上是一个指针,因此您将得到i == sizeof(char*)
:
void f(char b[8]) {
i = sizeof(b)/sizeof(b[0]);
}
您发布的代码应该明确给出数组元素的数量。如果没有,那么你的代码中要么有其他非常奇怪的东西,要么你的编译器坏得无可救药。
char b[8];
i = sizeof(b)/sizeof(b[0]);
这应该只给出值8。sizeof(b)将给出数组的大小,而不是您所感知的sizeof(char*)。
相关文章:
- 如何使我的 sizeof sum 结构与空参数包一起工作
- 同一对象的"sizeof"的不同答案
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- 当结构位于单独的头文件中时'unregistered datatype'在 QML 中出现Q_GADGET错误
- 为什么 sizeof 在 C++ 中给出不正确的字节数?
- sizeof(size_t) 可以小于 sizeof(int) 吗?
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 为什么 sizeof(ar)/ sizeof(ar[0]) 在传递给函数时无法在向量上正常工作?
- 向量索引变量声明(size_t 或 std::vector<DATATYPE>::size_type)
- 为什么 MSVC _count_of实现将 0 添加到 sizeof 的结果中?
- alignas() 对 sizeof() 的影响 - 强制性的?
- 在C++中,运算符 sizeof 返回什么数据类型?
- sizeof 函数如何在带和不带位字段的结构上工作?(填充)
- s.length 和 sizeof(a) 有什么区别?
- sizeof(enum) 可以不同于 sizeof(std::underlying_type<Enum>::
- 如何将数组传递给使用 sizeof 的函数?
- sizeof(size_t) 和 sizeof(ptrdiff_t) 什么时候会有所不同?
- " sizeof "操作员在编程中真的很重要吗,尤其是在构建大型应用程序时?
- 在QScopedPointer的实现中使用sizeof
- 不同数据类型的sizeof(datatype_pointer)/sizeof(datatype)值不同,原因何在