Tag: sizeof

为什么用两个参数调用sizeof运算符?

我最近遇到了一些看起来像的代码: if(sizeof(var,2) == 4) { … } (其中var是一种类型) 我很惊讶地发现看起来像sizeof运算符的两个参数。 快速扫描ISO / ANSI C99标准并未产生任何秘密。 我无法想出任何允许在那里使用逗号的语法。 搜索谷歌代码,我能够在一些PPC代码中找到这种语法的示例 。 这是一些特定于PPC的语法吗? 这是什么意思? 编辑:事实certificate,我所看到的 – 以及链接代码 – 都是WindRiver Diab编译器特有的语法: sizeof (type,int-const): 如果int-const为0,则sizeof返回类型的字节大小。 如果int-const为1 sizeof,则返回类型的对齐方式。 如果int-const为2 sizeof,则返回一个指定类型类型的整数常量。 在Diab C / C ++用户指南中查找“sizeof operator”了解值。 哇,他们真的超载了sizeof运算符的含义。 EDIT2:完整文档在这里: http : //www.vxdev.com/docs/vx55man/diab5.0ppc/c-additi.htm#3001432

在C中是malloc(256)和malloc(sizeof(char)* 256)等价吗?

我看到人们经常编写C代码,例如: char *ptr = malloc(sizeof(char)*256); 这真的有必要吗? 根据定义,标准说sizeof(char)==1 ,所以写入是不合理的: char *ptr = malloc(256); 谢谢,Boda Cydo。

在添加和计算时,sizeof如何适用于不同的数据类型?

#include int main() { short int i = 20; char c = 97; printf(“%d, %d, %d\n”, sizeof(i), sizeof(c), sizeof(c + i)); return 0; } 这段代码的输出是 2, 1, 4 根据我应该是 2, 1, 2 因为char + short int是short int , short int大小是2 。

你怎么知道用malloc()分配多少空间?

我是C新手,我来自C#。 我一直在学习内存管理和malloc()函数。 我也遇到过这段代码: char *a_persons_name = malloc(sizeof(char) + 2); 我不明白的是这为a_persons_name分配了多少空间。 是分配2个字符(例如AB)还是别的? 我也知道你有时可以使用malloc “幸运”并使用未分配的空间(这可能导致数据损坏和seg错误)。 那么我怎么知道我分配了多少空间以及我需要多少空间?

Objective-C运行时:为class_addIvar添加大小和对齐的内容?

Objective-C Runtime提供了class_addIvar C函数 : BOOL class_addIvar(Class cls, const char *name, size_t size, uint8_t alignment, const char *types) 我对size和alignment什么alignment ? 我正在添加一个类型为UITextPosition *的实例变量,但是没有UITextPosition对象在范围内。 对于size ,我可以只做sizeof(self) ,其中self是UITextField的子类吗? 即,我可以假设UITextPosition对象与UITextField对象的大小相同吗? 如何alignment ?

VLA和操作数大小的副作用

我知道sizeof从不评估其操作数,除非在所述操作数是VLA的特定情况下。 或者,我以为我知道。 void g(int n) { printf(“g(%d)\n”, n); } int main(void) { int i = 12; char arr[i]; // VLA (void)sizeof *(g(1), &arr); // Prints “g(1)” (void)sizeof (g(2), arr); // Prints nothing return 0; } 到底是怎么回事? 以防万一,这是在Coliru上用GCC 5.1编译的。

为什么sizeof(*“327”)在64位系统上返回1而不是8?

printf(“%lu \n”, sizeof(*”327″)); 我一直认为指针的大小在64位系统上是8个字节,但是这个调用一直在返回1.有人可以提供解释吗?

数据类型中的位数

我有两个任务分配,一个返回任何机器上int类型的位数。 我以为我会像这样编写我的函数: int CountIntBitsF() { int x = sizeof(int) / 8; return x; } 那看起来不错吗? 第二部分是用宏返回任何数据类型的任何位数,宏可以从limits.h中获取。 我在我的机器上查找了limits.h,还有http://www.opengroup.org/onlinepubs/007908799/xsh/limits.h.html ,但我认为我真的不明白其中任何一个会返回任何数据类型中的位数。 有什么想法吗? 谢谢。

在没有编译的情况下确定`sizeof float`

我想知道GCC中float的大小,而不必运行编译器。 我知道一个选项是编写一个小函数并让编译器打印出一个汇编列表。 有limits.h ,它包含最小值和最大值,但有没有类似的东西告诉不同的隐式类型的大小? 我在Windows 7 x64上使用GCC; 目标平台是ARM7 32位模式。 语言是C.

指针数组的大小

我对sizeof运营商有疑问 代码1: int main() { int p[10]; printf(“%d”,sizeof(p)); //output — 40 return 0; } 代码2: int main() { int *p[10]; printf(“%d”,sizeof(*p)); //output — 4 return 0; } 在第一个代码中,p指向一个int数组。 在第二个代码中,p指向一个指针数组。 我无法理解为什么第一个代码o / p是40但第二个代码o / p是4认为两者都指向相同大小的数组?