我无法弄清楚如何找到数组的大小就是我所做的
#include "stdio.h"
#define DEBUG 1
static void print_array(int arr[]);
int main (int argc, const char * argv[])
{
int str_numbers[5] = {1,4,8,2,9};
print_array(str_numbers);
}
static void print_array(int arr[])
{
int total = sizeof(arr)/sizeof(arr[0]);
#ifdef DEBUG
printf("Total %d", total);
#endif
}
Run Code Online (Sandbox Code Playgroud)
结果总共是2而不是5.我想念的是什么?
APr*_*mer 17
猜测:您没有显示您的代码,但实际上您正在为32位int的64位实现中的函数参数执行此操作.sizeof(array)是数组的大小,sizeof(指针)是指针的大小,而不是指针可指向的数组的大小.
#include <stdio.h>
void f(int* str_numbers)
{
int total = sizeof(str_numbers)/sizeof(str_numbers[0]);
printf("In f: %d\n", total);
}
int main ()
{
int str_numbers[5] = {1,4,8,2,9};
int total = sizeof(str_numbers)/sizeof(str_numbers[0]);
printf ("In main: %d\n", total);
f(str_numbers);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
给
In main: 5
In f: 2
Run Code Online (Sandbox Code Playgroud)
这是我对这种实施的期望.
编辑:使用类似的语法print_array(int arr[])不会改变arr是指针的事实.可能有一种方法在C99中说它是一个数组,但我不记得它和VLA已经在C11中被选中,以使标准与实践一致.