我在大学课堂上学习C和指针,我认为除了多维数组和指针之间的相似性之外,我对这个概念有很好的把握。
我认为因为所有数组(甚至多维数组)都存储在连续内存中,所以可以安全地将其转换为/mnt/c/
(假设给定的数组是int*
。)但是,我的教授说定义中的星数取决于数组中的维数。因此,int[]
将成为int[]
,int*
将成为int[][]
等。
所以我写了一个小程序来测试这个:
int**
令我惊讶的是,编译器在两个函数调用上发出了警告。
void foo(int** ptr)
{
}
void bar(int* ptr)
{
}
int main()
{
int arr[3][4];
foo(arr);
bar(arr);
}
这里发生了什么?你怎么能改变函数调用,所以其中一个会接受数组?
编辑: 是How to pass a multidimensional array to a function in C and C++的副本,因为我问的是如何更改函数调用本身,而不是函数签名。