n23*_*g16 2 c arrays pointers sizeof char
我正在测试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);
}
Run Code Online (Sandbox Code Playgroud)
    当一个数组被传递给一个函数时,实际发生的是一个指向数组中第一个元素的指针被传递。换句话说,数组衰减为指向第一个元素的指针。
在这两个声明中:
void test (char arrayT[]);
void test2 (char *arrayU);
Run Code Online (Sandbox Code Playgroud)
arrayTarrayU由于这种衰减,和是完全相同的类型,并且sizeof将为两者返回相同的值,即 a 的大小char *。
对比上面的这个:
char array1[] = "a string";
char *array2;
Run Code Online (Sandbox Code Playgroud)
wherearray1实际上是一个大小为 9 的数组,而array2是一个大小(在您的系统上)为 4 的指针。
因此,无法知道传递给函数的数组的长度。您需要将大小作为单独的参数传入:
void test (char arrayT[], size_t len);
Run Code Online (Sandbox Code Playgroud)