如何知道传递给函数的char数组的大小(以字节为单位)?

时间:2015-10-19 19:05:31

标签: c arrays pointers char sizeof

我正在测试 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);
}

1 个答案:

答案 0 :(得分:4)

当一个数组传递给一个函数时,实际发生的是传递一个指向数组中第一个元素的指针。换句话说,数组衰减成指向第一个元素的指针。

在这两个声明中:

void test (char arrayT[]);
void test2 (char *arrayU);
由于此衰减,

arrayTarrayU属于完全相同的类型,sizeof将为两者返回相同的值,即char *的大小。

将上述内容与此对比:

char array1[] = "a string";
char *array2;

其中array1实际上是一个大小为9的数组,而array2是一个指针,其大小(在您的系统上)是4。

因此,无法知道传递给函数的数组的长度。您需要将大小作为单独的参数传递:

void test (char arrayT[], size_t len);