我正在尝试使用sizeof函数确定数组的长度。
我的代码如下所示:
int n;
n = sizeof(a)/sizeof(a[0]);
我不断收到警告说这种类型不一致。我理解这一点,但我该如何解决这个问题呢?
答案 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]);
n
是int
。 sizeof
的结果类型为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);