问题描述
- 代码如下 请问我函数里的打印长度为什么为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;
}
解决方案
作为函数参数的数组名是个指针,sizeof 得到的是指针的长度,要想在函数内使用数组长度,只能另传入一个参数,或者像字符串那样特殊约定以‘’结尾。不过可以这样使用:
#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 %unvalue 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;
}
解决方案二:
在ARRAY_ABS里array只是一个指针,所以sizeof(array)的值是4。
解决方案三:
ARRAY_ABS里的array是指针类型,打印的是指针而不是数组~
解决方案四:
C++里的数组指针没有任何办法获取长度。
否则为什么字符串最后需要一个存储空间存''作为结尾,为什么strlen函数需要遍历数组去找这个字符?
这也是C/C++愚蠢的地方。
时间: 2024-11-16 02:03:40