Chinaunix
标题:
为什么f(int i[])是合法的声明,而f(int i[][])是不合法的声明?
[打印本页]
作者:
centos_71
时间:
2015-01-24 18:39
标题:
为什么f(int i[])是合法的声明,而f(int i[][])是不合法的声明?
数组作为参数传递给函数的时候,会退化成一个指针,这个我可以理解没有问题。
但是如果我声明了一个函数形如f(int i[][]),那么编译器会报错。为什么二维数组不能退化成一个指针呢?
作者:
hellioncu
时间:
2015-01-24 19:28
这样编译器无法确定数组的内存布局
作者:
zsszss0000
时间:
2015-01-24 20:16
编译器需要知道指针指向元素的大小事多少?
比如 f(int i[]),编译器知道i指向的元素的大小事int
比如f(int i[][8],编译器知到指针i指向的元素的是 int [8]但是 f(int i[][]就不可以了,编译器不知道是i指向的元素的大小是多少?)
回复
1#
centos_71
作者:
centos_71
时间:
2015-01-24 22:56
zsszss0000 发表于 2015-01-24 20:16
编译器需要知道指针指向元素的大小事多少?
比如 f(int i[]),编译器知道i指向的元素的大小事int
比如f(in ...
如果把int[][]理解为就是一个int**,编译器认为指针i指向一个int*,可以吗?
还请接续解释一下哈
作者:
bruceteen
时间:
2015-01-26 08:26
回复
4#
centos_71
"如果把int[][]理解为就是一个int**" ------ int[][]根本就不是int**
作者:
linux_c_py_php
时间:
2015-01-28 11:21
因为函数原型会理解int [][]为 int (*)[],指向一个不固定大小数组的地址,没法弄。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2