gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:24:48 24 4
gpt4 key购买 nike

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

最佳答案

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

在这两个声明中:

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);

关于c - 如何知道传递给函数的 char 数组的大小(以字节为单位)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33221983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com