再议C语言int a[]和int (*a)[]的区别

我们再C语言函数传递二维数组中使用了int (*a)[]的方式来给函数传递二维数组。这个写法看起来其奇怪的,这里我们对这种写法做个分析。

我们分析下面四个用法:

  1. int *a[]
  2. int (*a)[]
  3. int **a
  4. int a[][]
  1. int *a[]
  1. 定义a是一个数组。
  2. 每一个数组的元素是一个指针,指向一个整数。

结合属性是:
int *a[] => (int *) a[]
所以:a是一个数组,数组的每一个元素的类型是(int *)。

  1. int (*a)[]
  1. 定义a是一种指针。
  2. a指向一种整数数组。

对比1的写法,2使用了括号把'*'和a括起来(*a),因为操作符[]的优先级大于*的优先级。

所以:(*a)是一个数组,数组的每一个元素都是一个整数,而a是指向这个数组的指针。

  1. int **a
  1. 定义a是一个指针的指针。
  1. int a[][]

这个就很简单了。

  1. 定义a是一个二维数组。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容