C 数组的基本操作和操作与 Python 相比



为了我的项目,我正在从Python切换到C代码。当我尝试操作数组时,它与我以前在python中所做的非常不同。所以我只想知道 C 和 Python 中数组的一些"等效"操作。

因此,对于 Python 中的 numpy 数组,我们可以轻松地直接对两个数组进行求和(或其他操作)。从某种意义上说,我认为 numpy 数组就像一个虚拟的"矩阵",你可以用它进行操作,就好像它是作为一个整体存储的(至少看起来是这样)。

对于 C 数组,它看起来像一种不同的动物。从我可以从互联网上搜索到的内容来看,我必须使用 for loop 才能执行这些基本操作。我认为 C 中的数组只是一组值,它们按顺序存储在彼此相邻的地址中。

我知道C比Python快得多,但我也知道for loop是一件令人讨厌的事情,应该在Python中尽可能避免。这些 C 中的循环不是会减慢程序速度吗?(虽然我认为当我在 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;

最新更新