我想获取数组长度,尝试按函数使用,但是在函数中,我获取数组长度令人担心,运算结果为2,谁可以帮助我做到这一点。
#include <stdio.h>
#define GET_ARRAY_LEN(array,len){len = (sizeof(array) / sizeof(array[0]));}
void print_arry(int *nums){
int i;
int len;
GET_ARRAY_LEN(nums, len);
printf("%d\n",len);
for (i=0; i<len; i++)
printf ("%d ", nums[i]);
}
int main() {
int nums[]={ 2,7,3,11,15 };
int target = 9;
print_arry(nums);
return 0;
}
但这是正确的,我没有错。
#include <stdio.h>
#define GET_ARRAY_LEN(array,len){len = (sizeof(array) / sizeof(array[0]));}
int main() {
int nums[]={ 2,7,3,11,15 };
int target = 9;
int len;
GET_ARRAY_LEN(nums, len);
printf("%d\n",len);
return 0;
}
答案 0 :(得分:2)
将数组传递给函数(或以多种其他方式使用)时,它会衰减为指向该数组第一个元素的指针(a)。
这意味着它将是一个指针,其指针的大小 size ,而不是原始数组的大小。
如果您想知道大小,则必须在仍为数组的情况下进行计算,并将其也传递给它,例如:
void print_arry (int *nums, size_t sz) {
printf ("%z:", sz);
for (size_t i = 0; i < sz; ++i) {
printf (" %d", nums[i]);
}
putchar ('\n');
}
:
print_arry (nums, sizeof(nums) / sizeof(*nums));
(a)例如,参见C11 6.3.2.1 Lvalues, arrays, and function designators /3
:
除非它是
sizeof
运算符,_Alignof
运算符或一元&
运算符的操作数,或者是用于初始化数组的字符串文字,类型为“类型数组”的 转换为类型为“类型指针”的表达式,该表达式指向数组对象的初始元素 ,而不是左值。如果数组对象具有寄存器存储类,则该行为是不确定的。