在定义函数的时候,如果参数是二维数组,为什么可以省掉一维的部分?不太明白
省掉一维的部分之后,它还能准确的知道哪一行?我的意思是在外部定义函数的时候,二维数组做形参的话,为什么可以省略一维的部分...
省掉一维的部分之后,它还能准确的知道哪一行?
我的意思是在外部定义函数的时候,二维数组做形参的话,为什么可以省略一维的部分 展开
我的意思是在外部定义函数的时候,二维数组做形参的话,为什么可以省略一维的部分 展开
2个回答
展开全部
在C语言中, 二维数组实际上是一种特殊的一维数组, 即以行的顺序排列的 一维数组。
二维数组作为函数参数时, 因为函数调用时传递的是一个指针, 它指向由行向量够成的一维数组, 在函数的参数声明中必须指明数组的列数, 数组的行数没有太大关系, 可以指定也可以不指定。也就是说,第一维大小可以不填,但第二维必须给定。例如:
void Func(int arr[3][10]);
void Func(int arr[ ][10]);
或: void Func(int (*arr)[10]); -- 注意小括号,表示参数是指针,指向有10个元素的一维数组。
实际参数的二维数组的第二维必须同形参一样。 第一维可以大于或等于形参的第一维。
二维数组作为函数参数时, 因为函数调用时传递的是一个指针, 它指向由行向量够成的一维数组, 在函数的参数声明中必须指明数组的列数, 数组的行数没有太大关系, 可以指定也可以不指定。也就是说,第一维大小可以不填,但第二维必须给定。例如:
void Func(int arr[3][10]);
void Func(int arr[ ][10]);
或: void Func(int (*arr)[10]); -- 注意小括号,表示参数是指针,指向有10个元素的一维数组。
实际参数的二维数组的第二维必须同形参一样。 第一维可以大于或等于形参的第一维。
更多追问追答
追问
它按行存储的话,不应该跟列数没什么关系吗
追答
同列有关。 例如,始地址是 a,
第0行始地址 等于 a,
第1行始地址 等于 a + 列数*1
第2行始地址 等于 a + 列数*2
第n行始地址 等于 a + 列数*n.
凡实际参数的列数 等于 形参列数 的数组, 都可用来做实参, 无论它有多少行。
凡实际参数的列数 不等于 形参列数 的数组, 都不可用来做该函数的实参, 就算行数相等!
来自:求助得到的回答
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询