传递一维数组,二维数组和指针数组

Roh*_*jaj 2 c arrays pointers

要将1D数组传递给函数,我们这样做:

#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;
}
Run Code Online (Sandbox Code Playgroud)

要将2D数组传递给函数,我们这样做:

#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;
}
Run Code Online (Sandbox Code Playgroud)

因此,在将指针数组传递给函数时,我们可以这样做吗?

#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;
}
Run Code Online (Sandbox Code Playgroud)

说实话,我对指针和数组感到困惑.我花了很长时间才弄清楚如何传递2D数组.我试着搜索其他类似的问题,但无济于事.请帮助我:将指针数组传递给函数.此外,任何我可以清除混乱的链接将非常感激.

gsa*_*ras 5

在上一个示例中,您有一个指针数组.

是的,那会起作用,例如检查这个玩具示例:

#include <stdio.h>
#include <stdlib.h>

void func(int **arr, int n) {

    // print equal to arr[0][1] 
    printf("%d %d\n", n, *arr[1]);
}

int main(void) {
    int a = 1, b = 2, c = 3;

    // set the points of a, b, and c, to arr[0][0..2];
    int *arr[] = {&a, &b, &c};
    int n = sizeof(arr)/sizeof(arr[0]);
    printf("%d %d\n", n, *arr[1]);

    func(arr, n);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

3 2
3 2
Run Code Online (Sandbox Code Playgroud)