Tag: sizeof

sizeof在可变长度数组上的行为(仅限C)

我的问题是当传递的参数是动态数组变量长度数组时, sizeof()行为如何。 我们来看一个例子: int fun(int num_of_chars) { char name_arr[num_of_chars] = {0}; /* Do something*/ return sizeof(name_arr); } 在这个例子中,很明显返回值不是编译时常量。 因为大小取决于num_of_chars运行num_of_chars 。 引用C99标准(6.5.3.4): sizeof运算符产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的带括号的名称。 大小由操作数的类型确定。 结果是整数。 如果操作数的类型是可变长度数组类型,则计算操作数; 否则,不评估操作数,结果是整数常量。 我从[….操作数被评估….]中可以理解的是,当为sizeof()传递的参数是动态数组变量长度数组时, sizeof() ‘的行为类似于’一个函数,而不是一个函数运营商 。 我的理解是对的吗?

字符数组的大小和字符指针的大小

我有一段C代码,我不明白sizeof(…)函数是如何工作的: #include int main(){ const char firstname[] = “bobby”; const char* lastname = “eraserhead”; printf(“%lu\n”, sizeof(firstname) + sizeof(lastname)); return 0; } 在上面的代码中,sizeof(firstname)是6,sizeof(lastname)是8。 但是bobby是5个字符宽, eraserhead是11个宽。 我期待16 。 为什么sizeof对字符数组和字符指针的行为有所不同? 任何人都可以澄清吗?

sizeof(数组)如何在运行时工作?

我已经读过C中的sizeof运算符在编译时被解释,因为在编译时编译器知道数组大小及其类型,sizeof能够计算array占用的字节数。但是sizeof如何处理以下代码: #include #include int main() { int n; scanf(“%d”,&n); int a[n]; int s=sizeof(a); printf(“%d”,s); return 0; } 这里的数组大小在编译时是不知道的,那么它是如何正常工作的?

关于malloc和sizeof的新手问题

有人可以向我解释为什么我对字符串大小为6的malloc的调用返回4字节的sizeof? 事实上,我给malloc的任何整数参数我得到sizeof为4.接下来,我试图复制两个字符串。 为什么我复制的字符串输出(NULL)? 以下是我的代码: int main() { char * str = “string”; char * copy = malloc(sizeof(str) + 1); printf(“bytes allocated for copy: %d\n”, sizeof(copy)); while(*str != ‘\0’){ *copy = *str; str++; copy++; } copy = ‘\0’; printf(“%s\n”, copy); }