Tag: sizeof

64位计算机上int和sizeof int指针的大小

我只是想知道我怎么知道我的笔记本电脑是64位还是32位机器。 (这是64)。 所以,我考虑过打印以下内容: int main() { printf(“%d”,sizeof(int)); } 结果是4,这看起来很奇怪(因为它是64位机器) 但是,当我打印这个: int main() { printf(“%d”,sizeof(int*)); } 结果是8,这更有意义。 问题是: 由于我使用的是64位机器,因此int等基本类型不应该使用8个字节 (64位),那个sizeof int应该是8? 为什么不是这样? 为什么int *大小是8? 这里有点困惑, 所以,提前谢谢。

C:为什么size_t不是C关键字?

sizeof是一个C 关键字 。 它返回名为size_t的类型的大小。 但是, size_t 不是关键字,而是主要在stddef.h定义,也可能是其他C标准头文件。 考虑一种情况,您希望创建一个不包含任何C标准头文件或库的C程序。 (例如,如果你正在创建一个OS内核。)现在,在这样的代码中,可以使用sizeof (它是一个C关键字,因此它是语言的一部分),但它返回的类型( size_t )不可用! 这不是C标准规范中的某种问题吗? 你能澄清一下吗?

为什么sizeof(int)小于-1?

在以下代码中 #include int main() { if (sizeof(int) > -1) printf(“True”); else printf(“False”); return 0; } 我得到输出为“False”而不是“True”。我的理解是sizeof运算符只返回int的大小,在这种情况下为4。 为什么评估条件为假?

Sizeof不会返回C中变量的真实大小

请考虑以下代码 #include void print(char string[]){ printf(“%s:%d\n”,string,sizeof(string)); } int main(){ char string[] = “Hello World”; print(string); } 而输出是 Hello World:4 那有什么不对呢?

联盟规模大于预期。 如何在这里进行类型对齐?

#include union u1 { struct { int *i; } s1; struct { int i, j; } s2; }; union u2 { struct { int *i, j; } s1; struct { int i, j; } s2; }; int main(void) { printf(” size of int: %zu\n”, sizeof(int)); printf(“size of int pointer: %zu\n”, sizeof(int *)); printf(” size of […]

为什么sizeof(13.33)是8个字节?

当我给sizeof(a) ,其中a=13.33 ,一个浮点变量,大小是4个字节。 但如果直接给出sizeof(13.33) ,则大小为8个字节。 我不明白发生了什么。 有人可以帮忙吗?

为什么sizeof(x ++)不能增加x?

这是在dev c ++ windows中编译的代码: #include int main() { int x = 5; printf(“%d and “, sizeof(x++)); // note 1 printf(“%d\n”, x); // note 2 return 0; } 我希望在执行注释1后x为6。 但是,输出是: 4 and 5 任何人都可以解释为什么x不会在注1后增加?

理解32位C编译器中的sizeof(char)

(sizeof)char总是在32位GCC编译器中返回1 。 但由于32位编译器的基本块大小为4,当基本大小为4字节时,char如何占用单个字节? 考虑以下因素: struct st { int a; char c; }; sizeof(st)返回为8 ,默认块大小为4字节(因为分配了2个块) 我永远无法理解为什么sizeof(char)在分配大小为4的块时返回为1 。 有人可以解释这个??? 我会非常感谢任何回复解释它! 编辑:’bits’的拼写错误已更改为’bytes’。 我对第一次编辑的人抱歉。 我回滚了编辑,因为我没有注意到你所做的改变。 感谢所有那些明确表示必须改变的人,尤其是@Mike Burton,因为他对这个问题进行了抨击,并且@jalf似乎对我对概念的理解得出了结论!

‘sizeof’无效应用于不完整类型’struct array ‘

我试图通过将命令分成单独的文件来组织我的项目,以便于维护。 我遇到的问题是尝试迭代编译时定义的命令数组。 我创建了一个愚蠢的例子来重现我得到的错误。 . ├── CMakeLists.txt ├── commands │ ├── CMakeLists.txt │ ├── command.c │ ├── command.h │ ├── help_command.c │ └── help_command.h └── main.c ./CMakeLists.txt PROJECT(COMMAND_EXAMPLE) SET(SRCS main.c) ADD_SUBDIRECTORY(commands) ADD_EXECUTABLE(test ${SRCS}) 命令/的CMakeLists.txt SET(SRCS ${SRCS} command.c help_command.c) 命令/ command.h #ifndef COMMAND_H #define COMMAND_H struct command { char* name; int (*init)(int argc, char** argv); int (*exec)(void); […]

在C中是否有一个相当于sizeof()的东西?

应用于位域时,Sizeof()不起作用: # cat pc #include int main( int argc, char **argv ) { struct { unsigned int bitfield : 3; } s; fprintf( stdout, “size=%d\n”, sizeof(s.bitfield) ); } # gcc pc -op pc: In function ‘main’: pc:5: error: ‘sizeof’ applied to a bit-field …显然,因为它不能返回浮点部分大小或其他东西。 然而,它提出了一个有趣的问题。 在C中是否有一个等价物来告诉你变量/类型中的位数? 理想情况下,除了位域之外,它也适用于常规类型,如char和int 。 更新: 如果对于位域没有相当于sizeof()的语言,那么计算它的最有效方法是什么 – 在运行时! 想象一下,你有依赖于此的循环,如果改变位域的大小,你不希望它们破坏 – 并且没有公平的作弊,并使位域大小和循环长度成为宏。 […]