c - 在c中获取数组/vector 的大小

标签 c arrays sizeof

我正在尝试获取 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 中的数组没有边界检查,也无法知道长度。数组实际上是指向内存的指针,其中的元素依次排列。您使用提供的索引来计算所需元素的内存位置。例如。 adress of a[2] = a += 2 。访问数组范围之外的元素很可能(这也是最好的情况)导致段错误。否则,您将破坏一些您不应该破坏的内存。

如果您想要此功能,您可以使用 c++ vector 来自<vector>图书馆。或者您可以构建一个结构体,其中包含数组大小的条目。

关于c - 在c中获取数组/vector 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55290657/

相关文章:

c - 是否有可用的 JSR 257 ("Contactless Communication API") C API?

c - 即使在代码的前面声明了变量,也会出现“未声明的标识符”错误

c++ - 获取对象成员的大小

c++ - 原始数据类型的大小

c++ - 为什么没有返回语句时没有任何编译器错误?

c - 一种在 C 中找到最接近无符号长整数(32 位宽)的素数的方法?

php - PHP 是否优化数组类型的函数参数,而不是在未修改时通过引用显式传递?

javascript - 从用逗号分隔的对象中收集数据并将其作为单独的对象 - Javascript

c - 如何通过函数更改数组

c - 如何在gdb中列出所有结构体定义并获取结构体大小?