给函数传数组(C语言)

248 阅读1分钟

C语言中给函数传递数组类型的参数需要注意

给函数传递数组时,无法一下将数组的内容作为整体传进去。 只能传数组名进去,数组名就是数组的首地址,即只能将数组的地址传进去,也就是说,只能传一个4个字节> 大小的地址编号进去。

函数接收的数组可以分为三大类:一维数组、数组指针、指针数组。

1、一维数组

#include <stdio.h>

//void fun (int p[]) //形式1
void fun (int *p) { //形式2
    printf("p[2] = %d\n", p[2]);
    *(p + 3) = 100; //修改数组中a[3]的值
}

int main () {
    int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
    fun(a);
    printf("a[3]=%d\n", a[3]);
}

运行结果:

image.png

2、数组指针

#include <stdio.h>

//void fun (int p[][4]) //形式1
void fun (int (*p)[4]) {
    printf("p[1][1]=%d\n", p[1][1]);
    p[0][1] = 100; //修改数组中a[0][1]的值
    for (int i = 0; i < x; i++) {
        for (int j = 0; j < y; j++) {
            printf("%d ", p[i][j]);
        }
        printf("\n");
    }
}

int main () {
    int a[3][4] = {
            {1, 2,  3,  4},
            {5, 6,  7,  8},
            {9, 10, 11, 12}
    };
    fun(a, 3, 4);
    printf("a[0][1] = %d\n", a[0][1]);
}

运行结果:

image.png

3、指针数组

#include <stdio.h>

void fun (char **q, int x) {
    for (int i = 0; i < x; i++) {
        printf("%s\n",q[i]);
    }
}

int main () {
    char *p[3] = {"hello", "world", "kitty"};
    fun(p, 3);
    return 0;
}

运行结果:

image.png