Tag: sizeof

原始数据类型的大小

关于像int这样的原始数据类型的大小究竟取决于什么? 编译器 处理器 发展环境 或者它是这些或其他因素的组合? 对其原因的解释将非常有帮助。 编辑:对不起混淆..我想询问有关原始数据类型如int而不是关于POD,我确实理解POD可以包括结构和结构它是一个完整的不同的球游戏与填充进入图片。 我已经更正了Q,这里的编辑说明应该确保关于POD的答案看起来不相关。

结果大小不同

为什么n在以下函数中不等于8 ? void foo(char cvalue[8]) { int n = sizeof (cvalue); } 但是在这个版本的函数中n 确实等于8 : void bar() { char cvalue[8]; int n = sizeof (cvalue); }

‘%d’需要类型为’int’的参数,但参数2的类型为’long unsigned int’

我一直收到编译警告,但我不知道如何解决它: ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [ 程序运行正常,但我仍然收到编译警告: /* Sizeof.c–Program to tell byte size of the C variable */ #include int main(void) { printf(“\nA Char is %d bytes”, sizeof( char )); printf(“\nAn int is %d bytes”, sizeof( int )); printf(“\nA short is %d bytes”, sizeof( short […]

C – > sizeof字符串总是8

#include “usefunc.h” //don’t worry about this -> lib I wrote int main() { int i; string given[4000], longest = “a”; //declared new typdef. equivalent to 2D char array given[0] = “a”; printf(“Please enter words separated by RETs…\n”); for (i = 1; i sizeof(longest)) { longest = given[i]; } */ printf(“%lu\n”, sizeof(given[i])); //this ALWAYS RETURNS EIGHT!!! […]

为什么(sizeof(int)> -1)为false?

你能否certificate以下代码: #include int main() { if(sizeof(int) > -1) { printf(“\nTrue\n”); } else { printf(“\nFALSE\n”); } } 输出是FALSE …..告诉我原因

可靠地确定数组中的元素数量

每个C程序员都可以使用这个众所周知的宏来确定数组中元素的数量: #define NUM_ELEMS(a) (sizeof(a)/sizeof 0[a]) 这是一个典型的用例: int numbers[] = {2, 3, 5, 7, 11, 13, 17, 19}; printf(“%lu\n”, NUM_ELEMS(numbers)); // 8, as expected 但是,没有什么能阻止程序员意外地传递指针而不是数组: int * pointer = numbers; printf(“%lu\n”, NUM_ELEMS(pointer)); 在我的系统上,这打印2,因为显然,指针是整数的两倍。 我想过如何防止程序员错误地传递指针,我找到了一个解决方案: #define NUM_ELEMS(a) (assert((void*)&(a) == (void*)(a)), (sizeof(a)/sizeof 0[a])) 这是有效的,因为指向数组的指针与指向其第一个元素的指针具有相同的值。 如果改为传递指针,指针将与指向自身的指针进行比较,这几乎总是假的。 (唯一的例外是递归的void指针,也就是指向自身的void指针。我可以忍受它。) 意外地传递指针而不是数组现在在运行时触发错误: Assertion `(void*)&(pointer) == (void*)(pointer)’ failed. 太好了! 现在我有几个问题: 我使用assert作为逗号表达式有效标准C的左操作数吗? 也就是说,标准是否允许我使用assert作为表达式? 对不起,如果这是一个愚蠢的问题:) 可以在编译时以某种方式完成检查吗? […]

C – SizeOf指针

char c[] = {‘a’,’b’,’c’}; int* p = &c[0]; printf(“%i\n”, sizeof(*p)); //Prints out 4 printf(“%i\n”, sizeof(*c)); //Prints out 1 我对这部分代码非常困惑。 p和c都表示第0个索引处的数组c的地址。 但是为什么sizeof(* p)打印4? 不应该是1吗?

仅使用返回的指针获取malloc的大小

我希望能够改变我的数组的大小,所以我这样创建一个: int* array; array = malloc(sizeof(int)*10);//10 integer elements 我可以像往常一样使用它像数组一样,但是当我试图找到它的大小时: size = sizeof(array)/sizeof(int); 我得到了答案1,因为它没有将其识别为指向数组 如何获得arrays的大小? (我知道它在技术上不是一个数组,但有没有办法计算出分配的内存块的整个大小?) 我也正确地假设我在描述中说明了什么? 如果我在技术上对某事有误,请纠正我。

什么决定整数的大小?

sizeof(int)在我的Dev Cpp上显示4,即使它在64位机器上运行。 为什么不考虑底层硬件并显示8呢? 另外,如果我编译环境也改为64位( 64 bit compiler首先有意义吗?!),那么int的大小会改变吗? 是否有任何标准来决定这一点?

C中的单个结构成员的sizeof

我试图声明一个依赖于另一个结构的结构。 我想使用sizeof是安全的/迂腐的。 typedef struct _parent { float calc ; char text[255] ; int used ; } parent_t ; 现在我想声明一个与parent_t.text大小相同的struct parent_t.text 。 我怎样才能做到这一点? (下面的伪代码。) typedef struct _child { char flag ; char text[sizeof(parent_t.text)] ; int used ; } child_t ; 我用parent_t和struct _parent尝试了几种不同的方法,但我的编译器不接受。 作为一个技巧,这似乎工作: parent_t* dummy ; typedef struct _child { char flag ; char text[sizeof(dummy->text)] ; […]