为了我的项目,我正在从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;
您正在使用变量
sum
的地址递增arr
。鉴于:
sum += array[i];
使用存储在
sum
的int
位置的(i+1)th
值使array
递增。以下语句:
*myarray = arr;
将arr的值存储到myarray指向的值中,这等效于编写:
myarray[0] = arr;
关于python - 与Python相比,C数组的基本操作和操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44608790/