我们再C语言函数传递二维数组中使用了int (*a)[]的方式来给函数传递二维数组。这个写法看起来其奇怪的,这里我们对这种写法做个分析。
我们分析下面四个用法:
- int *a[]
- int (*a)[]
- int **a
- int a[][]
- int *a[]
- 定义a是一个数组。
- 每一个数组的元素是一个指针,指向一个整数。
结合属性是:
int *a[] => (int *) a[]
所以:a是一个数组,数组的每一个元素的类型是(int *)。
- int (*a)[]
- 定义a是一种指针。
- a指向一种整数数组。
对比1的写法,2使用了括号把'*'和a括起来(*a),因为操作符[]的优先级大于*的优先级。
所以:(*a)是一个数组,数组的每一个元素都是一个整数,而a是指向这个数组的指针。
- int **a
- 定义a是一个指针的指针。
- int a[][]
这个就很简单了。
- 定义a是一个二维数组。