c语言 二级指针

Python020

c语言 二级指针,第1张

第一条改成

int

a[10][20],*p=a[0]

二维数组本来就是以为数组,二级指针是指针的指针,不同概念

char

*a[]={"a","b"}

char

**p=a

这里定义了一个指针数组,里面保存了两个地址,一个是字符串a的首地址,一个是字符串b的首地址,然后数组的首地址a,这样用一个二级指针才能访问,这就是所谓的指针的指针

int

a[2][2]={1,2,3,4}

int

(*p)[2]=a

(*p)[2]的意思是,p是一个指针变量,只想一个有两个元素的一位数组,这不刚刚就是二维数组的首地址吗?所以这个(*p)[2]是可以指向二维数组首地址

*p[2]的意思是,定义一个数组,里面有两个指针元素,这和"[]","*"运算符优先级有关的

解释如下:

指针的本质其实就是地址,我们常说的指针哪,一般都是指的指针变量,就是存放地址的变量。

二级指针,就是指向指针的指针,举例说明:

char ch='A' //定义了一个char型变量ch,并初始化

char *p //定义了一个char型指针变量p

char **pp //定义了一个char型二级指针变量pp

p=&ch //把变量ch的地址赋值给p,那么p就指向了变量ch了。

pp=&p //把指针变量p的地址赋值给pp,那么pp就指向了指针p了。

因为指针变量,它有自己的内存空间,所有的指针类型的变量都是4个字节的大小,即存放的

是一个32位的地址值。

二级指针和二级地址的本质含义是一样的,指针一般是认为是指针变量的,其值是可变的;而地址,我们

通常认为它是一个常量值,是不变的。

平常地址与指针,一样的理解,本质是一样的,都是地址。我们说地址,比如说我定义了一个变量a,

那么这个变量a的地址&a,在编译阶段它的值就已经确定了,是不变的了。而对于指针变量p,它可以

存放变量a的地址&a,也可以存放变量b的地址&b,它的值是可变的,所以我们就把这样的变量就

就做指针。

    总而言之,指针和地址,本质是一样的,只是两种不同的叫法而已。

book,book+1这是二级指针,指向储存每本书的书名,作者等信息的数组的首地址;

*(book),*(book)+1是一级指针,分别指向第1本书的书名、作者信息

如图所示:

相当于一维数组的数据成员是每本书的书名等信息,二维数组的数据成员是前面的一维数组。