【发布时间】:2018-07-04 08:15:20
【问题描述】:
要将一维数组传递给函数,我们这样做:
#include <stdio.h>
#include <stdlib.h>
void func(int *arr, int n)
{
// code here
}
int main()
{
int arr[] = {......}; // declare array
int n = sizeof(arr)/sizeof(arr[0]);
func(arr); // calling function func
return 0;
}
要将二维数组传递给函数,我们这样做:
#include <stdio.h>
#include <stdlib.h>
void func(int arr[][2])
{
// code here
}
int main()
{
int arr[3][2]; // declare 2D array
func(arr); // calling function func
return 0;
}
那么在将指针数组传递给函数时,我们可以这样做吗?
#include <stdio.h>
#include <stdlib.h>
void func(int **arr, int n)
{
// code here
}
int main()
{
int *arr[] = {......}; // declare array of pointers
int n = sizeof(arr)/sizeof(arr[0]);
func(arr, n); // calling function func
return 0;
}
老实说,我对指针和数组感到困惑。我花了很长时间才弄清楚如何传递二维数组。我尝试搜索其他类似的问题,但无济于事。请帮助我:将指针数组传递给函数。此外,任何我可以消除混淆的链接将不胜感激。
【问题讨论】:
-
可以,int ** val,逻辑上等价于int val[n][m];它们不一样,但可以这样对待。但是应该注意,您检索两个 D 数组的所述大小的方法在本质上似乎有点狡猾,因为看起来您只能找到其中一个维度的大小,并设置两个维度之一。
-
这里唯一的问题是你不能直接在堆上分配
int *。