在c [复制]中获取数组/向量的大小

问题描述 投票:0回答:1

这个问题在这里已有答案:

我试图在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);
}
c arrays sizeof
1个回答
1
投票

不幸的是,C中的数组没有边界检查,也无法知道长度。数组实际上是指向内存的指针,其中元素排列在另一个之后。您使用提供的索引来计算所需元素的内存位置。例如。 adress of a[2] = a += 2。访问数组范围之外的元素很可能(这也是最好的情况)会导致分段错误。如果不是,你将破坏你不应该的东西的记忆。

如果你想要这个功能,你可以使用c++<vector>库中的向量。或者你可以构建一个结构,其中包含一个数组大小的条目。

© www.soinside.com 2019 - 2024. All rights reserved.