【发布时间】:2010-10-17 17:33:21
【问题描述】:
我正在使用以下宏来计算数组的大小:
#define G_N_ELEMENTS(arr) ((sizeof(arr))/(sizeof(arr[0])))
但是,当我评估函数中数组的大小(计算的值不正确)与调用函数的位置(计算的值正确)相反时,我发现它计算的值存在差异。下面的代码+输出。任何想法、建议、提示等。欢迎。
DP
#include <stdio.h>
#define G_N_ELEMENTS(arr) ((sizeof(arr))/(sizeof(arr[0])))
void foo(int * arr) // Also tried foo(int arr[]), foo(int * & arr)
// - neither of which worked
{
printf("arr : %x\n", arr);
printf ("sizeof arr: %d\n", G_N_ELEMENTS(arr));
}
int main()
{
int arr[] = {1, 2, 3, 4};
printf("arr : %x\n", arr);
printf ("sizeof arr: %d\n", G_N_ELEMENTS(arr));
foo(arr);
}
输出:
arr : bffffa40
sizeof arr: 4
arr : bffffa40
sizeof arr: 1
【问题讨论】:
-
将 foo 参数称为同名会使您违反直觉。考虑给它另一个名字来模拟编译器正在查看的内容。