为阵列获得不同的大小

时间:2016-05-12 02:17:18

标签: c

当我通过方法传递char数组并使用sizeof方法时,它与我直接使用sizeof的方式不同。有谁知道为什么以及如何解决这个简单的错误?

#include <stdlib.h>

int main()
{
    char c[5];
    char car[] = { 'a', 'b', 'c' };;
    int num = my_strlen(c);

    printf("%d \n", sizeof(c));
    printf("%d \n", sizeof(car));

    printf("%d \n", my_strlen(c));
    printf("%d \n", my_strlen(car));


    return 0;
}

int my_strlen(char s[]) // returns number of characters in a string
{
    return sizeof(s);
}

输出:

5
3
8
8

1 个答案:

答案 0 :(得分:1)

当用作参数时,数组会衰减到指针,这意味着

int my_strlen(char s[])
{
  return sizeof(s);
}
而是

int my_strlen(char* s)
{
  return sizeof(s);
}

所以sizeof(s) == sizeof(char*) == sizeof(void*)显然是你机器上的8个字节,因为你在64架构上运行。