前言
据了解,C语言的升维与降维好像是一个经常被提及的问题,仿佛通过测试面试者对这两种操作的理解就可以判断面试者对指针的基本认识。自认为对指针的理解应该已经到位了。那么我们下面就来看看到底什么是数组的降维与升维。
二维数组
升维与降维只存在于高于一维的数组中,我们就以最简单最常用的二维数组作为演示对象来说明什么是数组的降维与升维。下面是我一直以来对二维数组的理解。
float array[3][4]
我们获得了一个二维数组,array是二维数组名,它是指向一个含有四个元素的一维数组的数组指针
;array + 1的值是在array当前值的基础上增加了4*sizeof(float);array+1==array[1],它们都是指向第二个一维数组的。*array是指向整个数组的第一个元素的指针,**array是第一个元素的值,&a[0]是指向第一个数组的数组指针。以上便是我对二维数的理解。下面继续介绍什么是升维,什么是降维。
升维
int (*a)[3];
int b[3][3];
a = &b[0];
降维
int *a;
int b[3][3];
a = *(b);
注意点
:仔细观察这里的解引用符*和取地址符&的用法与普通的用法在含义上的区别。