使用sizeof的数组长度

时间:2017-08-18 20:35:40

标签: c sizeof

我正在尝试使用sizeof函数确定数组的长度。

我的代码如下所示:

int n;
n = sizeof(a)/sizeof(a[0]);

我不断收到警告说这种类型不一致。我理解这一点,但我该如何解决这个问题呢?

3 个答案:

答案 0 :(得分:1)

错误告诉您nx = 20 ny = 30 myList1 = [0]*100 myList2 = [1]*25 value1 = np.zeros(nx) value2 = np.zeros(ny) store = np.zeros(nx,ny,len(myList1),len(myList2)) for i in range(nx): for j in range(ny): f = calc(value1[i],value2[j]) #returns a list for k,data1 in enumerate(myList1): for p,data2 in enumerate(myList2): meanval = np.sum(f[:]/data1)*data2 store[i,j,k,p] = meanval 是函数参数,a将返回sizeof(a)的大小而不是数组的实际大小。原因是因为数组类型的函数参数实际上与指针完全相同(因此类型int*的参数实际上只是类型int[]的参数)并且数组中指定的大小type只是读者的信息,而不是编译器实际执行的信息。

int*技巧实际上只适合宏使用,而不应该用非宏代码编写,因为如果你在一个可以静态知道数组长度的上下文中(例如,它不是来自函数参数)然后你应该已经知道它是什么而不必计算它。

答案 1 :(得分:0)

为避免使用警告类型转换,即(int)(sizeof(a)/sizeof(a[0]))

答案 2 :(得分:0)

  

我不断收到警告,指出此类型不一致。

// OP's code
int n;
n = sizeof(a)/sizeof(a[0]);

nintsizeof的结果类型为size_t,是某些 unsigned 类型。 int的范围通常小于size_t[0...SIZE_MAX]。因此,有关类型不一致的警告。

// Alternative
size_t n;
n = sizeof(a)/sizeof(a[0]);
printf("Element Count: %zu\n", n);