【发布时间】:2016-01-18 05:55:21
【问题描述】:
我正在测试 sizeof 运算符。 在我的代码中的两种情况下,我得到了 指针的大小(我认为)。 在其他情况下,我得到数组占用多少字节。 当我将数组传递给函数时,如何获取以字节为单位的数组大小? sizeof 运算符还不够吗? 我做错了吗?
#include <stdio.h>
/*Testing the operator sizeof*/
void test (char arrayT[]);
void test2 (char *arrayU);
int main(int argc, char *argv[]){
char array1[7];
printf("array1 size is:%d\n", sizeof array1);
/*array1 size is: 7*/
char array2[] = { '1', '2', '3', '4', '5', '6', '7'};
printf("array2 size is:%d\n", sizeof array2);
/*array2 size is: 7*/
char array3[] = "123456";
printf("array3 size is:%d\n", sizeof array3);
/*array3 size is: 7*/
unsigned char array4[] = "123456";
printf("array4 size is:%d\n", sizeof array4);
/*array4 size is: 7*/
char arrayX[] = "123456";
test(arrayX);
/*arrayT size is: 4*/
char arrayY[] = "123456";
test2(&arrayY[0]);
/*arrayU size is: 4*/
return 0;
}
void test (char arrayT[]){
printf("arrayT size is:%d\n", sizeof arrayT);
}
void test2 (char *arrayU){
printf("arrayU size is:%d\n", sizeof arrayU);
}
【问题讨论】:
-
在
test2()中,根本无法知道arrayU指向的数组的大小,除非您传入另一个大小参数(至少在C++ 的当前状态下)标准)。有关详细信息,请参阅How to find the 'sizeof'(a pointer pointing to an array)?。 -
你不能。您需要以某种方式传递大小,通常作为另一个形式参数
-
当您将数组
a[]作为参数传递时,它会衰减为指针*a,因此sizeof a只返回指针的大小,而sizeof *a只返回指针的大小1的type的存储大小。 -
使用正确的格式说明符 %zu 打印 sizeof 的值,否则会触发未定义的行为
标签: c arrays pointers char sizeof