c/c++ 函数指针和指针函数,变量指针和指针变量

原创 2015年07月09日 17:01:50

函数指针

1.     定义

每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针。

2.     语法

指向函数的指针变量的一般定义形式为:

数据类型 (*指针变量名)(参数表);

3.     说明

1) 函数指针的定义形式中的数据类型是指函数的返回值的类型。

2) 区分下面两个语句:

int (*p)(int a, int b); //p是一个指向函数的指针变量,所指函数的返回值类型为整型

int *p(int a, int b); //p是函数名,此函数的返回值类型为整型指针

3) 指向函数的指针变量不是固定指向哪一个函数的,而只是表示定义了一个这样类型的变量,它是专门用来存放函数的入口地址的;在程序中把哪一个函数的地址赋给它,它就指向哪一个函数。

4) 在给函数指针变量赋值时,只需给出函数名,而不必给出参数。

如函数max的原型为:int max(int x, int y); 指针p的定义为:int (*p)(int a, int b); 则p = max;的作用是将函数max的入口地址赋给指针变量p。这时,p就是指向函数max的指针变量,也就是p和max都指向函数的开头。

5) 在一个程序中,指针变量p可以先后指向不同的函数,但一个函数不能赋给一个不一致的函数指针(即不能让一个函数指针指向与其类型不一致的函数)。

如有如下的函数:int fn1(int x, int y); int fn2(int x);

定义如下的函数指针:int (*p1)(int a, int b); int (*p2)(int a);

p1 = fn1; //正确

p2 = fn2; //正确

p1 = fn2; //产生编译错误

6) 定义了一个函数指针并让它指向了一个函数后,对函数的调用可以通过函数名调用,也可以通过函数指针调用(即用指向函数的指针变量调用)。

如语句:c = (*p)(a, b); //表示调用由p指向的函数(max),实参为a,b,函数调用结束后得到的函数值赋给c。

7) 函数指针只能指向函数的入口处,而不可能指向函数中间的某一条指令。不能用*(p+1)来表示函数的下一条指令。

8) 函数指针变量常用的用途之一是把指针作为参数传递到其他函数。


typedefvoid (*PFT) (char ,int );
void bar(char ch, int i)
{
cout
<<"bar"<<ch<<''<<i<<endl;
return ;
}
PFT pft;
pft
= bar;
pft(
'e',91);

指针函数

指针函数,指针函数是指带指针的函数,即本质是一个函数。函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。

1. 定义

首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有“函数返回值”,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。

2. 定义格式

类型名 *函数名(函数参数列表);
其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“类型名”表示函数返回的指针指向的类型”。
“(函数参数列表)”中的括号为函数调用运算符,在调用语句中,即使函数不带参数,其参数表的一对括号也不能省略。其示例如下:
int *pfun(int, int);
由于“*”的优先级低于“()”的优先级,因而pfun首先和后面的“()”结合,也就意味着,pfun是一个函数。即:
int *(pfun(int, int));
接着再和前面的“*”结合,说明这个函数的返回值是一个指针。由于前面还有一个int,也就是说,pfun是一个返回值为整型指针的函数。

变量的指针(指针)

对内存中变量的访问,即对每个变量都有对应的内存单元的访问。那么,访问变量,首先应找到其在内存的地址,或者说:一个地址唯一指向一个内存变量,我们称这个地址为变量的指针。
变量指针是指针,其实就是一个内存地址。
int a = 20;  
&a:是变量的指针(变量的地址)(指针就是地址,地址就是指针)。
int * p = &a;
p = &a;
指针变量,就是存放内存地址的变量,也就是存放指针的变量,p是一个指针变量。

指针变量

存放地址的变量称为指针变量。指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。
int * p = &a;
p:就是一个 指向存放int数据地址的变量,指针变量。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C语言函数指针变量

在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用...

文章标题 C++成员变量以及成员函数指针

类的成员变量指针和成员函数指针作为一种特殊的指针类型,在c++语法中有着特殊的使用方式和实现机制 这里有两个基本要点 *****1\成员变量指针本质上就是在类的声明中,变量在类中的相对地址. 2...

指针变量作为函数参数使用时注意的问题!

#include int main() { void swap(int *p1, int *p2); int a, b; int *pointer1, *pointer2; printf("plea...

C语言指针变量作为函数参数

文章转载地址:http://c.biancheng.net/cpp/html/74.html    侵删 在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。用指针...

以指针变量作为函数形参,实现两个值的互换

http://blog.pfan.cn/cunzhang/48985.html /*=========================================================...

智能指针变量做函数参数的一个值得注意的地方

作者:朱金灿来源:http://blog.csdn.net/clever101           先考考大家,下面一段程序,会有什么问题:#include #include #include &...

C/C++中,为什么字符串可以赋值给字符指针变量,单引号和双引号的区别

本文是通过几篇转帖的文章整理而成的: http://www.slyar.com/blog/c-quotation-marks.html http://www.cnblogs.com/KingOfFr...

96 C语言指针变量作为函数参数

C学习网:链接->C学习网 C训练网:链接->C训练网 在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。用指针变量作函数参数可以将函数外部的地址传递到...

指针变量作为函数参数

先描述一个题目,题目是这样的,输入a和b两个整数,按先大后小的顺序输出a和b。` /* Note:Your choice is C IDE */ #include "stdio.h" void mai...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)