代码如下 请问我函数里的打印长度为什么为0和main中的长度为10不一样

代码如下 请问我函数里的打印长度为什么为0和main中的长度为10不一样

问题描述:

#include
#include
#include
#include
#define GET_ARRAY_LEN(array) (sizeof(array)/sizeof(array[0]))
int ARRAY_ABS(double array[])
{
printf("\n%d",GET_ARRAY_LEN(array));

return 0;
}
int main()
{
double a[10] ={1,2,3,4,5,6,7,8,9,10};
printf("%d,",GET_ARRAY_LEN(a));
ARRAY_ABS(a);
return;
}

在ARRAY_ABS里array只是一个指针,所以sizeof(array)的值是4。

ARRAY_ABS里的array是指针类型,打印的是指针而不是数组~

C++里的数组指针没有任何办法获取长度。

否则为什么字符串最后需要一个存储空间存'\0'作为结尾,为什么strlen函数需要遍历数组去找这个字符?

这也是C/C++愚蠢的地方。

作为函数参数的数组名是个指针,sizeof 得到的是指针的长度,要想在函数内使用数组长度,只能另传入一个参数,或者像字符串那样特殊约定以‘\0’结尾。不过可以这样使用:

 #include<stdio.h>

#define  LENGTH(x) (sizeof(x) / sizeof(*(x+0)) )

int arr_length(int *arr, size_t len)
{
    int i;
    printf("Length of the array is %u\nvalue is: ", len);
    for(i = 0; i < len; ++i)
    {
        printf("%d  ", arr[i]);
    }
}

int main(void)
{
    int a[] = {12, 22, 32, 42, 52, 62};
    size_t len = 0;

    arr_length(a, LENGTH(a) );

    return 0;
}