关于c语言中二维数组形参的问题

对于二维数组比如一个double number[m][n]
既然number 和number[0]的值都是number[0][0]的地址 那么这两者有什么区别呢
当我定义了一个函数 这个函数用来把一个二维数组的值copy到另一个二维数组 这个函数的形参为什么只能写double number[][n]而不能直接写double * number呢

number 和 number[0] 虽然值相同,但它们分别表示的意义并不相同。

number 是 二维数组第0行的行地址,number + i 指向不同行。
number[0] 是 二维数组第0行第0列的元素地址,number[0] + i 指向具体的数组元素。

要想使number也可以参加表示具体数组元素的地址,需要使用如下形式:

 *(number+i)+j  

二维数组的行地址和元素地址是两个不同的概念,表示方法有很多种,实践中推荐您选择自己容易理解的形式。

对于第二个问题,应该用 double** number,即二级指针对应二维数组。

如果对您有帮助,请点击采纳答案好吗,谢谢~~

这个图是number[0][0]和number[0]的区别
图片说明

你实参传的是数组,形参可以用数组可以用指针 这里你要用 double *number[n]