本博文内容参考:《C 和 指针》
本博文解决两个问题,一是如何访问二维数组的行,以及元素;二是如何定义指向数组的指针以及如何赋值等。
很简单,快速记录!
先给出一个案例,判断下面这两个声明以及赋值合法吗?
int vector[10], *vp = vector;
int matrix[3][10], *mp = matrix;
第一个声明是合法的。它为一个整型数组分配内存,并把vp声明为一个指向整型的指针,并把它初始化为指向vector数组的第一个元素。vector 和 vp具有相同的类型,都是指向整型的指针。也有区别,vp是指针变量,而vector是指针常量。
第二条声明语句是非法的,这里的非法是指对指针mp的赋值是不正确的,声明本身是没有问题的。
它正确地创建了一个matrix数组,并把mp声明为一个指向整型的指针。但是mp的初始化是不正确的,因为matrix并不是一个指向整型的指针常量,而是一个指向整型数组的指针。(它指向matrix数组的第一个元素,而这个元素又包含10个元素,更确切地说,也就是matrix指向该数组的第一行,也就相当于一个一维数组。)
我们怎么样声明一个指向整型数组的指针呢?
int (*p) [10];
这个声明作为一个重新捡起c语言的人来说应该是不难的,但是对于小白来说,肯定还是会吓出一身冷汗!
声明也不是乱声明的,肯定有它的道理,我们来分析下:
下标引用【】的优先级要高于间接访问*,但是括号的优先级最高,所以首先执行的还是