可能重复:
C++:空类对象的大小是多少?
为什么以下输出1?
#include <iostream>
class Test
{
};
int main()
{
std::cout << sizeof(Test);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 这个陈述会产生什么?
void *p = malloc(sizeof(void));
Run Code Online (Sandbox Code Playgroud)
编辑:问题的扩展.
如果sizeof(void)在GCC编译器中产生1,那么分配1个字节的内存并且指针p指向该字节并且p ++将递增到0x2346?假设p是0x2345.我说的是p而不是*p.
鉴于以下计划,
#include <iostream>
using namespace std;
void foo( char a[100] )
{
cout << "foo() " << sizeof( a ) << endl;
}
int main()
{
char bar[100] = { 0 };
cout << "main() " << sizeof( bar ) << endl;
foo( bar );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出
main() 100
foo() 4
Run Code Online (Sandbox Code Playgroud)
我正在使用一64-bit台机器.
$ uname -m
x86_64
$ file /usr/bin/file
/usr/bin/file: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
$
Run Code Online (Sandbox Code Playgroud)
当我运行以下程序时,我得到了sizeof(int)as 4-bytes.
#include <stdio.h>
int main(void)
{
printf("sizeof(int) = %d bytes\n", (int) sizeof(int));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我运行一个16-,32-和64-位机,那么不就意味着一个大小integer为16-,32-并64-分别位?
在我的机器上,我找到了WORD_BITIS 32.它不应该64在64-bit机器上吗?
$ getconf WORD_BIT
32 …Run Code Online (Sandbox Code Playgroud) 我不明白为什么sizeof运营商产生以下结果:
sizeof( 2500000000 ) // => 8 (8 bytes).
Run Code Online (Sandbox Code Playgroud)
...它返回8,当我执行以下操作时:
sizeof( 1250000000 * 2 ) // => 4 (4 bytes).
Run Code Online (Sandbox Code Playgroud)
...它返回4而不是8(这是我的预期).有人可以澄清如何sizeof确定表达式(或数据类型)的大小以及为什么在我的特定情况下会发生这种情况?
我最好的猜测是sizeof运算符是编译时运算符.
赏金问题:是否有运行时运算符可以评估这些表达式并产生我的预期输出(没有强制转换)?
这是一个C++面试测试题而不是作业.
#include <iostream>
using namespace std;
enum months_t { january, february, march, april, may, june, july, august, september,
october, november, december} y2k;
int main ()
{
cout << "sizeof months_t is " << sizeof(months_t) << endl;
cout << "sizeof y2k is " << sizeof(y2k) << endl;
enum months_t1 { january, february, march, april, may, june, july, august,
september, october, november, december} y2k1;
cout << "sizeof months_t1 is " << sizeof(months_t1) << endl;
cout << "sizeof y2k1 is " << sizeof(y2k1) …Run Code Online (Sandbox Code Playgroud) C标准允许指向不同类型的指针具有不同的大小,例如sizeof(char*) != sizeof(int*)是允许的.但是,它确实要求如果指针转换为a void*然后转换回其原始类型,则必须将其与原始值进行比较.因此,从逻辑上讲,sizeof(void*) >= sizeof(T*)对于所有类型T,正确吗?
在当今使用的大多数常见平台上(x86,PPC,ARM和64位变体等),所有指针的大小都等于本机寄存器大小(4或8字节),而不管指向的类型.是否存在任何深奥或嵌入式平台,其中指向不同类型的指针可能具有不同的大小?我特别询问数据指针,虽然我也有兴趣知道是否存在函数指针具有异常大小的平台.
我绝对不会问C++的指向成员的指针和指向成员的指针函数.这些在常见平台上具有不寻常的大小,甚至可以在一个平台内变化,具体取决于指针类的属性(非多态,单继承,多继承,虚继承或不完整类型).
指针的大小是否与其指向的类型的大小相同,或者指针总是具有固定大小?例如...
int x = 10;
int * xPtr = &x;
char y = 'a';
char * yPtr = &y;
std::cout << sizeof(x) << "\n";
std::cout << sizeof(xPtr) << "\n";
std::cout << sizeof(y) << "\n";
std::cout << sizeof(yPtr) << "\n";
Run Code Online (Sandbox Code Playgroud)
这会是什么输出?会sizeof(xPtr)返回4并sizeof(yPtr)返回1,或者2指针实际上会返回相同的大小吗?我问这个的原因是因为指针存储的是存储器地址而不是它们各自存储的地址的值.
该程序应该打印出来的元素array,但是当它运行时,没有显示输出.
#include <stdio.h>
#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = { 23, 34, 12, 17, 204, 99, 16 };
int main() {
int d;
for (d = -1; d <= (TOTAL_ELEMENTS - 2); d++)
printf("%d\n", array[d + 1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么这个程序没有显示任何输出?