迭代C数组的语法

时间:2017-02-27 21:34:44

标签: c

我是初学者。我非常熟悉Java,在迭代数组中我很简单:

for (i = 0; i < arr.length; i++)
// Stuff here

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

double function(const double* values);

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

C中的数组是分配用于保存某种类型的多个元素的一块内存。访问每个元素的方法是使用指向内存位置的指针并取消引用它(即*ptr)。

values是指向可以存储double的内存位置的指针。假设它指向分配给存储double的一块内存的第一个位置,您可以通过执行*valuesvalues[0]来访问该块中的第一个元素。将使用*(values + 1)values[1]访问第二个元素。等等。

鉴于此,你只能通过将位置放在一起来了解内存块的大小。该函数需要采用另一个参数来告诉它应该有多少元素。

double function(const double* values, const int count);

如果您刚开始使用C,我建议您深入了解该语言的基础知识。在掌握C的基本原理时,我发现The C Programming Language 非常简单,简短且内容丰富。

答案 2 :(得分:0)

Pure C数组不知道它们的大小(这就是C非常强大的原因)。您可以随时索引任何内容(只要操作系统允许您)

所以,

int main ( )
{
    //size of your array, you could use size_t which is type for sizes I'll not be doing so,
    //to simplify the code
    const int size = 10


    //both "size", the type and the name of the array are virtually infinitely flexible
    int array[size] = {0}//never forget to initialize your array, or you'll get garbage.

    //in pure C, you have to declare i before using it, here I declare and also initialize it
    //because, why not?
    int i = 0;

    //since i have already been initialized, I could easily rewrite the for statement below:
    //for ( ; i < size; ++i ) no initialization required. 
    for ( i = 0; i < size; ++ i )
    {
        array[i] //do whatever you want.
    }
}