gpt4 book ai didi

c - 改进的获取数组大小的方法

转载 作者:行者123 更新时间:2023-11-30 19:37:00 26 4
gpt4 key购买 nike

我创建了一个函数,它接收表示十六进制数的字符数组的指针,并返回它的十进制值。

在该函数中,这是我当前用来获取数组大小的函数

size_t iSize = 0;
while (s[iSize] != '\0'){ iSize++; }

我正在寻找更好的方法来做到这一点。 我已经尝试过 int `iSize = sizeof(s)/sizeof(s[0])。

最佳答案

数组的大小不通过函数传递。示例:

int my_getsize(int* ptr)
{
return sizeof(ptr);
}

int main()
{
int arr[100];
printf("%d\n", sizeof(arr)); //output: 400
printf("%d\n", my_getsize(arr)); //output: 4
}

在32位系统中my_getsize(buf)返回4,这是指针的大小。而 sizeof(buf) 返回 400,即 100 * sizeof(int) (也是 4)。解决这个问题的唯一方法是将数组大小传递给函数。例如 foo(arr, sizeof(arr)/sizeof(arr[0]))

字符数组是一种特殊情况,因为字符串以 null 结尾,您可以查找数组中的最后一个零。但请注意,这不会返回包含空终止符的数组大小。它与strlen相同。示例:

size_t my_strlen(char* ptr)
{
size_t iSize = 0;
while (*ptr++) iSize++;
return iSize;
}

对于char buf[] = "12345"sizeof(buf)为6,而strlen(buf)为5。通常您无需担心此类简单函数的优化,因为编译器会为您完成此操作。

关于c - 改进的获取数组大小的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40332978/

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