【C语言】二维数组作为函数参数

    技术2024-07-18  77

    01.目录

    目录

    01.目录02.一个误区03.二维数组作为函数参数

    02.一个误区

    想来学C语言的人,都会觉得数组并不是很难,一问C语言最难的是什么?指针?结构体? 今天我就以我们认为不难的数组聊聊。 上学的时候老师就告诉我们:一个[]就想当与一个*。这句话有问题嘛?答案是没问题。 但是,就是因为这个没问题,导致工作中有问题。

    一个简单的思考:

    int arr[4][5]; int** p = arr;

    请问,有问题嘛? 好想没问题,老师不是说了嘛,一个[]代表一个*,两个不就是两个*嘛。

    我想说的是问题就出在这里,这么写,不会报语义错误,但是编译器会报错。 比如:

    #include <stdlib.h> #include <stdio.h> void test(int** p,int len){}; //代码块我不写代码 int main() { int arr[3][3] = {0}; int len = sizeof(arr) / sizeof(*arr); test(arr,len); system("pause"); return 0; }

    这里将二维数组作为参数传入函数的时候,编译器会做一步操作!

    int** p = (*arr)[4]; //error,这里会报间接级别不同

    如果上面这个还看不出来错在哪儿,C语言确实是我们没学好。

    数组实际类型是int [3][4],在作为右值时可以被转化为int (*)[4],它们都和int **不同,自然不可用。

    03.二维数组作为函数参数

    结论:数组做为形参时,退化为指针

    三维数组,退化为指向二维数组的指针 二维数组,退化为指向一维数组的指针 一维数组,退化为指向类型(如int)的指针

    Processed: 0.009, SQL: 9