以图明志

C/C++编程语言

[专题] 漫谈C指针:定义函数的指针类型

用这个类型来声明函数指针变量
就像自定义数据类型一样,我们也可以先定义一个函数指针类型,然后再用这个类型来声明函数指针变量。首先,在void (*FunType)(int)前加了一个typedef 。这样只是定义一个名为FunType函数指针类型,而不是一个FunType变量。然后,“FunType FunP;”这句就如“PINT px;”一样地声明一个FunP变量。

C/C++编程语言

[专题] 漫谈C指针:函数调用的指针写法

用多种方法来调用函数
有了FunP指针变量后,我们就可以对它赋值指向MyFun,然后通过FunP来调用MyFun函数了。看我如何通过FunP指针变量来调用MyFun函数的: (*FunP)(20); 运行看看。嗯,不错,程序运行得很好。哦,我的感觉是:MyFun与FunP的类型关系类似于int 与int * 的关系。函数MyFun好像是一个如int的变量(或常量),而FunP则像一个如int * 一样的指针变量。

C/C++编程语言

[专题] 漫谈C指针:函数名其实也是指针

函数指针变量的声明
就象某一数据变量的内存地址可以存储在相应的指针变量中一样,函数的首地址也以存储在某个函数指针变量里的。这样,我就可以通过这个函数指针变量来调用所指向的函数了。在C系列语言中,任何一个变量,总是要先声明,之后才能使用的。那么,函数指针变量也应该要先声明吧?那又是如何来声明呢?

C/C++编程语言

[专题] 漫谈C指针:一个指针应用实例

学会调试指针传递的方法
上面代码,你认为会是输出什么呢?运行试试。唉!怎么输出的是:没有找到!而不是“找到了,……”。明明a值为’d’,而str字符串的第四个字符是’d’,应该找得到呀!再看函数定义处:void find1(char array[], char search, char *pa)看调用处:find1(str, a, p); 依我在前面的分析方法,函数调用时会对每一个参数进行一个隐含的赋值操作。

C/C++编程语言

[专题] 漫谈C指针:指向另一指针地址的指针

只是指向指针的指针而已
在前文中,我们看到,指针变量本身与其它变量一样也是在某个内存地址中的,如pi的内存起始地址是9。同样的,我们也可能让某个指针指向这个地址。第一句:short int **ppi; —— 声明了一个指针变量ppi,这个ppi是用来存储(或称指向)一个short int * 类型指针变量的地址。

C/C++编程语言

[专题] 漫谈C指针:回顾指针概念

一个指针的存储实例
早在前面我就对指针的实质进行了阐述。今天我们又要学习一个叫做“指向另一指针地址”的指针。让我们先回顾一下指针的概念吧。看到没有:短整型指针变量pi的值为5,它就是i变量的内存起始地址。所以,这时当我们对*pi进行读写操作时,其实就是对i变量的读写操作。

C/C++编程语言

[专题] 漫谈C指针:参数的引用传递

引用传递与值传递的区别
我们先看Exchg3函数的定义处Exchg3(int &x, int &y)。参数x、y是int的变量,调用时我们可以像值传递(如: Exchg1(a, b); )一样调用函数(如: Exchg3(a, b);)。但是x、y前都有一个取地址符号“&”。有了这个,调用Exchg3时函数会将a、b 分别代替了x、y了,我们称:x、y分别引用了a、b变量。

C/C++编程语言

[专题] 漫谈C指针:参数的地址传递

参数只是传递地址
这样,有了头两行的隐含赋值操作。我们现在已经可以看出,指针px、py的值已经分别是a、b变量的地址值了。接下来,对*px、*py的操作当然也就是对a、b变量本身的操作了。所以函数里头的交换就是对a、b值的交换了,这就是所谓的地址传递(传递a、b的地址给了px、py),你现在明白了吗?

C/C++编程语言

[专题] 漫谈C指针:参数的值传递

实参与形参
原来,其实函数在调用时是隐含地把实参a、b 的值分别赋值给了x、y,之后在你写的Exchg1函数体内再也没有对a、b进行任何的操作了。交换的只是x、y变量。并不是a、b。当然a、b的值没有改变啦!函数只是把a、b的值通过赋值传递给了x、y,函数里头操作的只是x、y的值并不是a、b的值。这就是所谓的参数的值传递了。

C/C++编程语言

[专题] 漫谈C指针:参数传递的三道题目

值传递、地址传递与引用传递
我们都知道:C语言中函数参数的传递有:值传递、地址传递、引用传递这三种形式。题一为值传递,题二为地址传递,题三为引用传递。不过,正是这几种参数传递的形式,曾把我给搞得晕头转向。我相信也有很多人与我有同感吧?后面部分请让我逐个地谈谈这三种传递形式。

C/C++编程语言

[专题] 漫谈C指针:const int *pi的语义

注意const修饰的对象
我先来说说const int *pi是什么作用 (当然int const *pi也是一样的,前面我们说过,它们实际是一样的)。看出来了没有,pi的值是可以被修改的。即它可以重新指向另一个地址的,但是,不能通过*pi来修改i2的值。这个规则符合我们前面所讲的逻辑吗?当然符合了。

C/C++编程语言

[专题] 漫谈C指针:从const int i说起

符号常量与指针
有了const修饰的ic 我们不称它为变量,而称符号常量,代表着20这个数。这就是const 的作用。ic是不能在它处重新赋新值了。认识了const 作用之后,另外,我们还要知道格式的写法。有两种:const int ic = 20; 与 int const ic = 20; 它们是完全相同的。

C/C++编程语言

[专题] 漫谈C指针:声明指针常量

数组名就是常量指针
请再看下面的代码:pa++ ; /*注意这里,指针值被修改*/这时候的代码能成功编译吗?不能。因为pa指针被定义为常量指针了。这时与数组名a已经没有不同。这更说明了数组名就是常量指针。但是……

C/C++编程语言

[专题] 漫谈C指针:指针与数组

用指针访问数组元素
看pa = a,即数组名赋值给指针,以及通过数组名、指针对元素的访问形式看,它们并没有什么区别,从这里可以看出:数组名其实也就是指针。难道它们没有任何区别?有,请继续。可以看出,这段代码也是将数组各元素值输出。不过,你把循环体{}中的pa改成a试试。你会发现程序编译出错,不能成功。

C/C++编程语言

[专题] 漫谈C指针:指针是什么东西

其实指针就是个变量
指针,想说弄懂你不容易啊!我们许多初学指针的人都要这样感慨。我常常在思索它,为什么呢?其实生活中处处都有指针,我们也处处在使用它。有了它我们的生活才更加方便了。没有指针,那生活才不方便。不信?你看下面的例子。这是一个生活中的例子:比如说你要我借给你一本书,我到了你宿舍,但是你人不在宿舍。

C/C++编程语言

[专题] 漫谈C指针:变量赋值与取地址

简单理解变量的存储
你当然知道个两个语句是将30存入i变量的内存空间中,将“t”字符存入a变量的内存空间中。我们可以利用这样的形象来理解:……接下来我们来看看&i是什么意思?是取i变量所在的地址编号嘛。我们可以这样读它:返回i变量的地址编号。以上图的内存映象为例,屏幕上显示的不是i值30,而是显示i的内存地址编号6了。
138 / 139 首页 < Prev 135 136 137 138 139 Next > 尾页 页码: