【问题标题】:C pass on to argument on which array to work onC 传递给要处理哪个数组的参数
【发布时间】:2012-10-17 22:39:51
【问题描述】:

如果这是一个重复的问题,我深表歉意,但我似乎找不到关键字来搜索我要问的问题。

基本上,我已经为自己定义了一个结构。

#define max_terms 101

typedef struct{
    int row, col, value;
} term;

现在我有了三个不同的术语,即 a[max_terms]、b[max_terms] 和 c[max_terms] 我想输入以下函数的参数,以便我可以选择对三个已定义数组中的哪一个进行处理

void input(/*parameter here*/){
    a[0].row = 0; // want to be able to choose the array to work on instead of just a
}

感谢您的阅读!

【问题讨论】:

    标签: c arrays function parameters arguments


    【解决方案1】:

    您有两种常见的选择:

    void input(term *t, size_t size)
    

    和:

    void input(term t[], size_t size)
    

    两者意思相同。传递参数对两者都是一样的。当你有:

    term t[SIZE];
    

    那么其中任何一个都可以工作:

    input(&t[0], SIZE);
    

    或:

    input(t, SIZE);
    

    显然,第二种更方便。和第一个意思一样;这只是一种更短的编写方式。 C 允许这样做,因为传递数组第一个元素的地址是一种非常常见的操作。

    【讨论】:

      【解决方案2】:

      最简单的方法是将指向数组第一个元素的指针传递给函数。

      void input(term *a)
      {
          a[0].row = 0;
      }
      

      /* ... */

      term b[max_terms];
      input(b);
      

      正如 cmets 中的 giorashc 所述,如果数组并非都使用相同的大小,您需要将实际大小作为附加参数传递。

      【讨论】:

      • 传递大小也可能是不溢出给定数组的好方法
      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      • 2013-08-30
      • 2021-01-29
      • 2018-11-28
      相关资源
      最近更新 更多