函数指针、函数返回指针、const指针、指向const指针,指向const的const指针。
2013-08-13 09:54
453 查看
①函数指针
函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是一致的。函数指针有两个用途:调用函数和做函数的参数。
函数指针的声明方法为:
函数类型 (标志符指针变量名) (形参列表);
注1:“函数类型”说明函数的返回类型,“(标志符指针变量名 )”中的括号不能省,若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
下面的程序说明了函数指针调用函数的方法:
#include<stdio.h>
int max(int x,int y){ return(x>y?x:y); }
int main()
{
int (*ptr)(int, int);
int a,b,c;
ptr=max;
scanf("%d%d",&a,&b);
c=(*ptr)(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
}
ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。不过注意,指向函数的指针变量没有++和--运算,用时要小心。
②函数返回指针
void* f( )
③const指针
当使用带有const的指针时其实有两种意思。一种指的是你不能修改指针本身的内容,另一种指的是你不能修改指针指向的内容。
const指针,它的意思是指针本身的值是不能被修改的。它只有一种写法
int* const p=一个地址; (因为指针本身的值是不能被修改的所以它必须被初始化) 这种形式可以被理解为,p是一个指针,这个指针是指向int 的const指针。它指向的值是可以被改变的如*p=3;
④指向const指针
指向const的指针,它的意思是指针指向的内容是不能被修改的。它有两种写法。
const int* p; (推荐)
int const* p;第一种可以理解为,p是一个指针,它指向的内容是const int 类型。p本身不用初始化它可以指向任何标示符,但它指向的内容是不能被改变的。
第二种很容易被理解成是p是一个指向int的const指针(指针本身不能被修改),但这样理解是错误的,它也是表示的是指向const的指针(指针指向的内容是不能被修改的),它跟第一种表达的是一个意思。为了避免混淆推荐大家用第一种。
⑤指向const的const指针
这个指针本身和它指向的内容都是不能被改变的。
const int* const p=一个地址;
int const* const p=一个地址;
函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是一致的。函数指针有两个用途:调用函数和做函数的参数。
函数指针的声明方法为:
函数类型 (标志符指针变量名) (形参列表);
注1:“函数类型”说明函数的返回类型,“(标志符指针变量名 )”中的括号不能省,若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
下面的程序说明了函数指针调用函数的方法:
#include<stdio.h>
int max(int x,int y){ return(x>y?x:y); }
int main()
{
int (*ptr)(int, int);
int a,b,c;
ptr=max;
scanf("%d%d",&a,&b);
c=(*ptr)(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
}
ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。不过注意,指向函数的指针变量没有++和--运算,用时要小心。
②函数返回指针
void* f( )
③const指针
当使用带有const的指针时其实有两种意思。一种指的是你不能修改指针本身的内容,另一种指的是你不能修改指针指向的内容。
const指针,它的意思是指针本身的值是不能被修改的。它只有一种写法
int* const p=一个地址; (因为指针本身的值是不能被修改的所以它必须被初始化) 这种形式可以被理解为,p是一个指针,这个指针是指向int 的const指针。它指向的值是可以被改变的如*p=3;
④指向const指针
指向const的指针,它的意思是指针指向的内容是不能被修改的。它有两种写法。
const int* p; (推荐)
int const* p;第一种可以理解为,p是一个指针,它指向的内容是const int 类型。p本身不用初始化它可以指向任何标示符,但它指向的内容是不能被改变的。
第二种很容易被理解成是p是一个指向int的const指针(指针本身不能被修改),但这样理解是错误的,它也是表示的是指向const的指针(指针指向的内容是不能被修改的),它跟第一种表达的是一个意思。为了避免混淆推荐大家用第一种。
⑤指向const的const指针
这个指针本身和它指向的内容都是不能被改变的。
const int* const p=一个地址;
int const* const p=一个地址;
#include <iostream> using namespace std; int main(int argc, char *argv[]) { int a=3; int b; /*定义指向const的指针(指针指向的内容不能被修改)*/ const int* p1; int const* p2; /*定义const指针(由于指针本身的值不能改变所以必须得初始化)*/ int* const p3=&a; /*指针本身和它指向的内容都是不能被改变的所以也得初始化*/ const int* const p4=&a; int const* const p5=&b; p1=p2=&a; //正确 *p1=*p2=8; //不正确(指针指向的内容不能被修改) *p3=5; //正确 p3=p1; //不正确(指针本身的值不能改变) p4=p5;//不正确 (指针本身和它指向的内容都是不能被改变) *p4=*p5=4; //不正确(指针本身和它指向的内容都是不能被改变) return 0; }
相关文章推荐
- C语言学习9: malloc动态内存存储,动态内存分配去空格字符增长版,动态内存分配去符号incr增长版,型参和返回值都是int型的函数的指针,main函数的地址也可以用指针指向,typedef定义函数指针,函数定义与嵌套的作用,返回函数指针类型,const作用
- 【C】理解指针数组、数组指针、函数指针、函数指针数组、指向函数指针数组的指针
- 深入理解C语言中的指向函数的指针和返回指针的函数!
- 指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针
- 函数返回指向内存的指针
- 指向const对象的指针和const指针
- “指向const对象的指针” 和 “const指针”
- C++之指向const对象的指针和const指针
- 返回指针的函数 与 指向函数的指针
- 理解 指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针
- 指向函数的指针 ------ 函数指针(function pointer)
- 【C语言】返回指针的函数与指向函数的指针
- 指针数组,数组指针,存放数组指针的数组,指向存放数组指针数组的指针,函数指针,函数指针数组,指向函数指针数组的指针
- (转)const和指针(指向const对象的指针、const指针)
- “指向const对象的指针” 和 “const指针”
- 关于函数指针数组与返回数组指针的函数
- C语言 const 指针使用技巧之——返回指针的函数
- 返回指针的函数&&指向函数的指针
- 函数指针与函数返回指针的区别
- C++中返回指向函数的指针