彻底搞定C语言指针 第六篇

指向另一指针的指针

一、针概念:

早在本系列第二篇中我就对指针的实质进行了阐述 。今天我们又要学习一个叫做指向另一指针地址的指针。让我们先回顾一下指针的概念吧!

当我 们程序如下申明变量:

short int i;

char a;

short int * pi;

程序会 在内存某地址空间上为各变量开辟空间,如下图所示。

内存地址→6     7  8      9     10     11    12    13     14    15

------------------- ------------------------------------------------------------------

…  |      |  |  |  |  |  |  |  |  |

--------------------------------------- ----------------------------------------------

|short int i |char a|  |short int * pi|

图中所示中可看出:

i 变量在内存地址5的位置,占两个字节。

a变量在内存 地址7的位置,占一个字节。

pi变量在内存地址9的位置,占两个字节。(注:pi 是指针,我这 里指针的宽度只有两个字节,32位系统是四个字节)

接下来如下赋值:

i=50;

pi=&i;

经过上在两句的赋值,变量的内存映象如下:

内存地址→6      7  8     9     10     11    12    13  14     15

----- ---------------------------------------------------------------------------------

…  |    50  |  |  |    6   |  |  |  |

----------- ---------------------------------------------------------------------------

|short int i |char a|  |short int * pi|

看到没有:短整型指针变量pi的值为6,它就是I变量的内 存起始地址。所以,这时当我们对*pi进行读写操作时,其实就是对i变量的读写操作。如:

*pi=5;   //就是等价于I=5;

你可以回看本系列的第二篇,那里有更加详细的解说。

二、指针的地址与指向另一指针地址的指针

在上一节中,我们看到,指针变量本身与其 它变量一样也是在某个内存地址中的,如pi的内存起始地址是10.同样的,我们也可能让某个指针指向这 个地址。

看下面代码:

short int * * ppi;    //这是一个指向指针的指针,注意 有两个*号

ppi=π

第一句:short int * * ppi;——申明了一个指针变量 ppi,这个ppi是用来存储(或称指向)一个short int * 类型指针变量的地址。

第二句: &pi那就是取pi的地址,ppi=π就是把pi的地址赋给了ppi.即将地址值10赋值给ppi.如下图:

内存地址→6     7  8     9     10     11    12    13   14    15

------------------------------------------------------------------------ ------------

…  |    50     |  |  |  6  |  10  |   |

---------------------------------------------------------------------------------- --

|short int i|char a|  |short int * pi|short int ** ppi|

从图中看出,指针变 量ppi的内容就是指针变量pi的起始地址。于是……

ppi的值是多少呢? ——10.

*ppi的值是多少呢?——6,即pi的值。

**ppi的值是多少 呢?——50,即I的值,也是*pi的值。

呵呵!不用我说太多了,我相信你应明白这种 指针了吧!

时间: 2024-08-02 20:13:38

彻底搞定C语言指针 第六篇的相关文章

彻底搞定C语言指针 第四篇

1 int i 说起 你知道我们申明一个变量时象这样int i :这个i是可能在它处重新变赋值的. 如下: int i=0: //- i=20://这里重新赋值了 不过有一天我的程 序可能需要这样一个变量(暂且称它变量),在申明时就赋一个初始值.之后我的程序在其它任何处都 不会再去重新对它赋值.那我又应该怎么办呢?用const . //************** const int ic =20: //- ic=40://这样是不可以的,编译时是无法通过,因为我们不能对 const 修饰的ic

彻底搞定C语言指针 第五篇

一.三道考题 开讲之前,我先请你做三道题目.(嘿嘿,得先把你的头脑搞昏才行 --唉呀,谁扔我鸡蛋?) 1.考题一:程序代码如下: void Exchg1(int x, int y) { int tmp; tmp=x; x=y; y=tmp; printf ("x=%d,y=%d\n",x,y) } void main() { int a=4,b=6; Exchg1 (a,b) ; printf("a=%d,b=%d\n",a,b) } 输出的结果 : x=____,

彻底搞定C语言指针 第七篇

函数名与函数指针 一 数调用 一个通常的函数调用的例子: //自行包含 头文件 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); int main(int argc, char* argv[]) { MyFun(10); //这里是调用MyFun(10);函数 return 0; } void MyFun(int x) //这里定义一个MyFun函数 { printf ("%d\n",x); } 这个MyFun函数是一个无返回值的函数,

彻底搞定C语言指针 第三篇

1.数组元素 看下面代码 int i,a[]={3,4,5,6,7,3,7,4,4,6}; for (i=0;i<=9;i++) { printf ( "%d", a[i] ); } 很显然,它是显示a 数组的各元素值. 我们还可以这样访问元素,如下 int i,a[]={3,4,5,6,7,3,7,4,4,6}; for (i=0;i<=9;i++) { printf ( "%d", *(a+i) ); } 它的结果和作用完全一样 2. 通过指针访问数

彻底搞定C语言指针 第一篇

1.语言中变量的实质 要理解C指针,我认为一定要理解C中"变量"的存储实质, 所以我就从"变量"这个东西开始讲起吧! 先来理解理解内存空间吧!请看下图: 内存地址→ 6 7 8 9 10 11 12 13 ----------------------------------------------------------------- ... | | | | | | | |.. ------------------------------- ------------

彻底搞定C语言指针 第二篇

二.指针是什么东西 想说弄懂你不容易啊!我们许多初学指针的人都要这样的感慨.我常常在思索它,为什么呢?其实生活中处处都有指针.我们也处处在使用它.有了它我们的生活才更加方便 了.没有指针,那生活才不方便.不信?你看下面的例子. 这是一个生活中的例子:比如说你要 我借给你一本书,我到了你宿舍,但是你人不在宿舍,于是我把书放在你的2层3号的书架上,并写了一 张纸条放在你的桌上.纸条上写着:你要的书在第2层3号的书架上.当你回来时,看到这张纸条.你就 知道了我借与你的书放在哪了.你想想看,这张纸条的作

开发unity插件——一次搞定unity编辑器常用功能

开发unity插件--一次搞定unity编辑器常用功能 这篇文章主要分享unity中与editor插件等相关的使用,比较基础,不过如果都掌握了就可以扩展写一些unity插件了,平时开发中也会提升工作效率. editor相关脚本一定要放在Editor文件夹下,继承monobehaviour的文件不要放到Editor文件夹下. monobehaviour相关的编辑器功能 首先常用的在继承monobehaviour类中写public变量可以在inspector中序列化可编辑一般人都知道了,下面是一些可

win7语言栏不见了怎么办?简单两步搞定

win7语言栏不见了怎么办?很多网友遇到这种问题都急得像热锅上的蚂蚁,其实解决方法很容易,只需简单几步就可以搞定啦. 操作步骤如下: 1. 依次单击"开始"--"控制面板"--"更改键盘或其它输入法"--"更改键盘"; 2. 打开"语言栏"选项卡,点击选中"停靠于任务栏"后按"确定"退出.         注:更多精彩教程请关注三联windows7教程栏目,三联电脑办

【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】下 ~ Net程序员的福利

上一节我们通过通用封装说了下QQ登录的申请和通用讲解,[开源]简单4步搞定QQ登录,无需什么代码功底[无语言界限]:http://www.cnblogs.com/dunitian/p/5055789.html 这次我们专门为Net程序员准备一个专版(其他方向的看通用封装即可,使用起来很简单) 做个简单的案例:(EF+MVC) 1.先看一下自己的appid 2.前台一系列设置:(图片看不见的话点开看,会放大的) 3.数据库设计(简单版本) 4.Model类 5.后台处理(不同框架处理不一样,这边给