python - C 数组基本操作和操作与 Python 的比较

标签 python c arrays

为了我的项目的目的,我正在从 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/

相关文章:

python - 如何将8bit(0-255)数据表保存为图像文件,然后从图像中检索数据?

Python 线程作用域

c - 是否有一种算法可以打印数组子序列的所有排列?

python - 修复中间有换行的句子 : Python is\n is fun

python - 计算第一个事件和最后一个事件

c - 如何使用 C struct 字符串数组避免缓冲区溢出

c - memset上的程序崩溃?

PHP:数组里面有一个if语句

const char **name VS char *name[]

php - codeigniter 替换模型中的数组值