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

01.目录

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)的指针

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cain Xcy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值