搜索
简帛阁>技术文章>【C语言】指针初阶 - 指针?数组?二级指针?

【C语言】指针初阶 - 指针?数组?二级指针?

5.指针和数组

数组名代表什么?

众所周知,数组名就是数组首元素的地址(严谨一点,是数组首元素的首地址),那到底是不是呢?看实例:

很显然是的。既然我们已经了解了指针基本的运算,又知道数组名是首元素的地址,那我是不是可以通过数组名来遍历数组呢?请看↓

很显然也是可以的。那就意味着操作数组元素的时候可以通过指针来完成:                                     

有了上面的基础,我们可以推导一下:

很显然有arr[ i ] <==> *(arr + i) <==> *(arr + i)

我们知道“[ ]”本质上是个操作符,arr和i是两个操作数,

那arr[ i ]可不可以写成i[ arr ]呢?我们试一下:

经过验证,我们惊奇地发现竟然也是可以的!

所以,如果用p来表示arr的话,我们甚至可以用p[ 2 ]来调用数组中的元素。

 

6.二级指针 

我们很容易定义一个指针变量:

int a = 10;
int* pa = &a;

那pa是一个指针变量,是变量就得有地址啊,那指针变量的地址存放在哪里呢?这就引出了我们要说的 - 二级指针。

我们可以通过这样的形式来定义二级指针:

int a = 10;     //(1)
int* pa = &a;   //(2)
int** ppa = &pa;//(3)

(2)中定义的pa为指针变量,(3)中定义的ppa就是一个二级指针,它指向的是pa的地址。在(3)中,第二个“*”说明定义的ppa是一个指针变量,而前面的“int*”意思是ppa这个指针指向的pa是一个int*类型,即整型指针。

我们看一下运行结果:

画一个图来进一步理解二级指针:

理解之后不难发现,ppa也有它自己的地址,所以我们还可以定义三级指针、四级指针...

对pa解引用可以找到a,同理,对ppa解引用就可以找到pa:

*pa <==> a
*ppa <==> pa <==>&a

既然这样,如果再对*ppa解引用,就相当于对pa解引用,就可以找到a啦!那事实是不是这样呢?看图!

 

开辟空间,必然有地址s>0x006ffe10s>0x006ffe10S>0x006ffe1c//apS>0x006ffe1c//ap*s>NULLap//a*s>a
二级指针的概念首先任何值都有地址,一级指针的值虽然是地址,但这个地址做为一个值亦需要空间来存放,是空间就具有地址,这就是存放地址这一值的空间所具有的地址,二级指针就是为了获取这个地址,一级指针所关联的
文章目录一指针数组概念简单代码二数组指针概念一般格式&数组名与数组名的区别一指针数组概念概念:用来存放指针数组;注意是——数组!区别:intarr[10]{<!>};//(1)char
一级指针int*p;//表示定义一个int型(4字节)的指针pp//表示p自身的地址位置p//表示p指向的地址位置(也就是p变量的值)*p//表示p指向的地址里面的内容所以*的作用:p变量的值作为地址
很多初学者都对C中的指针很迷糊,希望这篇blog能帮助到大家:1什么是“指针”:在执行C程序的时候,由于我们的数据是存储在内存中的。所以对于C程序本身来说,如果想找到相应被调用的数据,就要知道存储该数
指针的概念指针就是地址,利用这个地址可以找到指定的数据指针就是地址,那么在使用的时候,常常会简单的说指针变量为指针指针变量就是存储地址的变量int*p1;//申请了一个变量,即在内存中开辟了一块内存
C语言指针作为函数返回值:C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数函数运行结束后会销毁在它内部定义的所有局部数据include<stdioh>include
什么是指针数组?一个数组,里面存放的元素均为指针类型数据,被称为指针数组。其定义形式?int*name[4];基本实例一:利用数组初始化指针数组include<stdioh>includ
函数指针:一个指向函数的指针。一般用函数名表示。函数指针数组:元素为函数指针数组。转移表。c语言中函数不可以定义为数组,只能通过定义函数指针来操作。1include<stdioh>23
目录二级指针(指向指针指针)二级指针的定义与理解二级指针定义格式二级指针赋值实例二级指针(指向指针指针)指针可以指向一份普通类型的数据,例如int、double、char等,也可以指向一份指针类型