对于这项任务,我的教授给了我们以下函数标题:
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;条目)传入条目,但我有点迷失。
答案 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
指针明显缺少这种意图 - 到指针。由于elements
为const
,签名会告诉我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;
完成;)