我应该如何将此整数数组传递给此函数?

时间:2014-10-21 17:35:17

标签: c pointers parameter-passing

对于这项任务,我的教授给了我们以下函数标题:

void thisFunc(Node** root, const int * elements[], const int count)

据推测,这是正确的,我无法改变这一点。

Const int * elements是一个用scanf取得的int值数组;我用

宣布了我的意思
int entries[atoi(argv[1])-1];

并成功填充

   for(int a=0; a < atoi(argv[1]); a++) {
      scanf("%i", &entries[a]);
   }

但是我正在努力调用thisFunc。

   thisFunc(&bst, entries, atoi(argv[1]));

引发了明显的错误:

note: expected 'const int **' but argument is of type 'int *'

如果我正确的话,它期待一个指向整数指针的指针数组。我应该如何处理将使其成为有效参数的条目数组?

我尝试通过引用(&amp;条目)传入条目,但我有点迷失。

3 个答案:

答案 0 :(得分:8)

签名意味着你要传递一个指向指针的指针,指针又建议动态分配(而不是可变长度数组):

// Read the length once, and store it for future reference.
// Calling atoi on the same string multiple times is inefficient.
int len = atoi(argv[1]);
int *entries = malloc(sizeof(int) * len);
... // Populate the data in the same way, but use len instead of atoi(argv[1])
...
// Now you can take address of entries
thisFunc(&bst, &entries, len);
...
// Do not forget to free memory allocated with malloc once you are done using it
free(entries);

注意:有了这个说法,我几乎可以肯定你的教授在声明thisFunc时犯了一个小错误,并且它应该被声明为:

void thisFunc(Node** root, const int elements[], const int count)

我认为这应该是正确的签名的原因是,需要有一个使变量成为指针的意图,并且使elements const指针明显缺少这种意图 - 到指针。由于elementsconst,签名会告诉我thisFunc不会修改elements后面的数据。同时,通过使用指针,签名告诉我它将修改elements本身,这看起来不像函数将要执行的操作,因为elements在其他地方被读取。 / p>

答案 1 :(得分:1)

如果您想使用提到的功能修改数组条目[]中的值,请将您的呼叫更改为: thisfunc(&amp; bst,&amp; entries,atoi(argv [1]));

问题是你正在传递&#34;条目&#34;这是一个数组但你的函数期望一个指向int array []的指针。因此,传递条目的地址是&#34;&amp; entries&#34;。

答案 2 :(得分:-4)

您是否尝试过隐式转换它?

(const int**)variable;

完成;)