为了我的项目的目的,我正在从 Python 切换到 C 代码。当我尝试操作数组时,它与我以前在 python 中所做的非常不同。所以我只想知道 C 和 Python 中数组的一些“等效”操作。
因此,对于Python中的numpy数组,我们可以轻松地直接对两个数组进行元素求和(或其他操作)。从某种意义上说,我认为 numpy 数组就像一个虚拟“矩阵”,您可以对其进行操作,就好像它作为一个整体存储一样(至少看起来如此)。
对于 C 数组来说,它看起来像是一种不同的动物。根据我从互联网上搜索到的信息,我必须使用 for 循环才能完成这些基本操作。我认为 C 中的数组只是一组值,它们按顺序存储在彼此相邻的地址中。
我知道 C 比 Python 快得多,但我也知道 for 循环是一件令人讨厌的事情,在 Python 中应该尽可能避免。 C 中的这些 for 循环不是会减慢程序速度吗?(尽管我认为当我在 Python 中使用 numpy 模块时,该模块会隐式处理这些 for 循环)
我也对指针感到困惑。考虑这个接受一维数组的函数:
int myfunc(int *myarray);
{
int sum=0;
for(int i=0; i<sizeof(myarray); i++)
{
sum += myarray[i];
}
return sum
}
假设我输入一些数组,说“arr”,然后我让:
*myarray = arr
因此,稍后在函数中,当我调用以下行时:
sum += myarray[i]
我实际上正在这样做:
sum += &arr
这确实令人困惑。对我来说,看起来我是直接将变量的地址与其他变量的值相加。这段代码是错误的还是我误解了指针?
最佳答案
在你的函数中:
int myfunc(int *myarray); // The ; at the end of this line will
// generate a compiler error.
{
int sum=0;
for(int i=0; i<sizeof(myarray); i++) // size of int* is the size of a pointer
// 4 for 32bit app, or 8 for 64 bits apps
{
sum += myarray[i];
}
return sum
}
您应该将元素数量作为参数传递给数组,以使其正常工作:
int myfunc(int *myarray, int count)
{
int sum=0;
for (int i = 0; i < count; i++)
{
sum += myarray[i];
}
return sum;
}
[编辑]当您执行此操作时:
sum += &arr;
您正在使用变量 arr
的地址递增 sum
。
鉴于:
sum += array[i];
使用存储在 array
的第 (i+1)th
位置处的 int
值来递增 sum
。
声明如下:
*myarray = arr;
将arr的值存储到myarray指向的值中,这相当于写:
myarray[0] = arr;
关于python - C 数组基本操作和操作与 Python 的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44608790/