获得数组大小的改进方法

时间:2016-10-30 19:54:49

标签: c

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

在该函数中,这是我目前用于获取数组大小的内容

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

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

1 个答案:

答案 0 :(得分: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-terminator的数组大小。它与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.通常,您不必担心使用此类简单函数进行优化,因为编译器会为您执行此操作。