迭代C数组的语法

use*_*189 -2 c

我是初学者C.我非常熟悉Java,在这里迭代数组我就像这样简单:

for (i = 0; i < arr.length; i++)
// Stuff here
Run Code Online (Sandbox Code Playgroud)

但在C中,*符号会让我失望.有人可以解释为什么下面的输入变量引用一个数组,以及迭代它的语法?

double function(const double* values);
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 5

它不是指数组,而是指单个const double元素.但是,该元素很可能是常数双精度数组中的第一个元素.

因此,如果我们预先形成指针算术,我们可能会引用数组中的其他元素.为此,您可以使用下标运算符values[i].但您必须确保只计算和引用阵列中的地址.而你无法从指针值中知道这一点.

因此,除非您的函数被修改为接收大小参数,否则您通常不会引用除了传递地址的元素之外的任何元素.

但是,一旦你有了可用的大小,迭代应该看起来就像你期望的Java体验一样:

double function(const size_t num_elem, const double* values) {
  double result = 0.0;
  // .. pre iteration stuff
  for (size_t i = 0; i < num_elem; ++i) {
    if (values[i] < 1e-6)
      // do something
  }
  // post iteration stuff
  return result;
}
Run Code Online (Sandbox Code Playgroud)