我正在尝试获取c中数组的大小,由于某种原因,对于这种流行的方法,我得到了错误的答案。
int innerprod(int *v, int *u)
{
int n = sizeof(v)/sizeof(v[0]);
printf("%d\n",n); // ouptut here is giving me '2' for a '3' size array
double result = 0.0;
for (int i = 0; i < n; i++)
{
result += v[i]*u[i];
printf("%d\n",v[i]*u[i]);
}
return result;
}
int main()
{
int V[3] = {3,4,-1}; //a 3 size array
int W[3] = {7,-2,3};
int x = innerprod(&V,&W);
printf("%d\n",x);
}
答案 0 :(得分:1)
不幸的是,C语言中的数组没有边界检查,也无法知道长度。数组实际上是指向内存的指针,在内存中您的元素接连排列。您使用提供的索引来计算所需元素的内存位置。例如。 adress of a[2] = a += 2
。访问数组范围之外的元素很可能(这也是最好的情况)会导致分段错误。如果没有,您将破坏您本该无法做到的事情的记忆。
如果需要此功能,可以将c++
与<vector>
库中的向量一起使用。或者,您可以构建一个结构,其中包含一个用于数组大小的条目。