C++ 不同数据类型的sizeof(数据类型\指针)/sizeof(数据类型)值不同,为什么?
我在C++程序中声明了以下结构:C++ 不同数据类型的sizeof(数据类型\指针)/sizeof(数据类型)值不同,为什么?,c++,c,arrays,pointers,sizeof,C++,C,Arrays,Pointers,Sizeof,我在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 },
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,即数组中的元素数;始终,即使您添加或减少元素
但是
在我的机器上给出i=a常数=4的值
现在这是合理的,因为sizeofchar*在我的机器上是恒定的,sizeofchar也是恒定的
但是,一旦我声明struct person,sizeofperson*和sizeofperson也应该是常量,并且它还应该产生一个常量值,不是吗???您的编译器是错误的
char b[8];
i = sizeof(b)/sizeof(b[0]);
应产生i==8
得到的结构大小结果是正确的。如果我是你,我会换编译器
如果你将b传递给一个计算大小的函数,那么你是对的。但是现在的代码是否定的
另外,如果是一个计算sizeofpeople/sizeofpeople[0]的函数,它接收了作为参数的人员,那么您还将得到一个常量
这是因为数组作为参数传递时会衰减为指针。是否确实要将sizeof应用于数组而不是指针 在这种情况下,函数参数实际上是一个指针,因此您将得到i==sizeofchar*: 您发布的代码应该明确给出数组元素的数量。如果没有,那么您的代码中可能有其他非常奇怪的东西,或者您的编译器彻底崩溃了
char b[8];
i = sizeof(b)/sizeof(b[0]);
该值应仅为8。sizeofb将给出数组的大小,而不是您认为的sizeofchar*。我不相信char变量总是给出4。。。在我的机器上是4,我执行了代码。sizeofchar*取决于在我的机器上容纳地址所需的字节数,sizeofchar始终为1,不是吗。所以,它需要4*sizeofchar来容纳我机器上的地址……这篇文章是一个很好的例子,说明了为什么人们应该发布完整的程序而不是代码片段。请发布最短的完整程序来演示您的问题。但是在上面的代码中,你没有一个字符,你有一个字符[8 ]。@ Oli Charlesworth:我的编译器做了一些奇怪的事情,我用微软Visual C++来尝试代码,它工作了…我用微软Visual C++来测试代码,现在它工作了,谢谢!!
void f(char b[8]) {
i = sizeof(b)/sizeof(b[0]);
}
char b[8];
i = sizeof(b)/sizeof(b[0]);