数据结构学习-指针与函数
来源:互联网 发布:乐视手机怎么关闭网络 编辑:程序博客网 时间:2024/06/07 16:48
函数指针传递参数
①指针作为函数的参数
②指针作为函数的返回值
③指向函数的指针
指针作为函数参数
函数的参数不仅可以是整型,实型,字符型等数据,还可以是指针类型,因此可以像其他变量一样在函数间传递指针变量,
使用时注意,指针存储的是一个变量的地址,而不是变量的值。
#include<stdio.h>
void swap(int *p,int *q) //传递的是地址,相应的定义指针变量作形参
{
int temp;
temp = *p;
*p = *q;
*q = temp;
}
int main()
{
int x1,x2;
scanf("%d%d",&x1,&x2);
swap(&x1,&x2); //注意实参是变量x1,x2的地址
printf("%d %d",x1,x2);
return 0;
}
函数返回指针
函数返回值的类型不仅可以是简单的数据类型,指针作为一种变量,同样允许作为函数的返回值
返回指针的函数定义的一般形式为
类型标识符 * 函数名(形参表)
{
函数体语句
}
其中,函数名之前加了 * 号表明这是一个指针型函数,即返回值是一个指针。类型标识符表示了返回的指针值所指向的数据类型
#include<stdio.h>
int* max(int *a,int *b)
{
return *a>*b?a:b;
}
int main()
{
int x,y,*p=NULL;
scanf("%d%d",&x,&y);
p=max(&x,&y);
printf("%d",*p);
return 0;
}
指向函数的指针
一个函数所包含的指令在内存中总是占用一段连续的存储空间,把这段存储空间的首地址称为函数的入口地址,通过函数名可以得到这一地址,也可以把函数的这个首地址赋予一个指针变量,使该指针变量指向该函数,然后通过指针变量就可以找到并调用这个函数。有时也把这种指向函数的指针变量称为 “函数指针变量”
定义指向函数的指针变量
类型标识符(*指针变量名)(形参列表)
类型标识符表示被指函数的返回值的类型,(*指针变量名)表示*后面的变量是定义的指针变量。
例如:int (*pf)()
表示 pf 是一个指向函数的指针变量,该函数为无参函数,且函数的返回值是整型
利用函数指针调用函数的一般形式为:
(*指针变量名)(实参表)
#include<stdio.h>
int max(int a,int b)
{
return a>b?a:b;
}
int min(int a,int b)
{
return a<b?a:b;
}
int main()
{
int (*p)(int,int); //p为指向函数的指针变量
int x,y,z;
scanf("%d%d",&x,&y);
p=max; //通过赋值让p指向max函数
z=(*p)(x,y);
printf("\nmax=%d",z);
p=min; //通过赋值让p指向min函数
z=(*p)(x,y);
printf("\nmin=%d",z);
return 0;
}
通过指向函数的指针变量调用函数的步骤
①定义指向函数的指针变量,如int(*p)(int,int)
②把被调用函数的入口地址(即函数名)赋给指针变量,如p=max和p=min
③用指向函数的指针变量调用该函数,如z=(*p)(x,y)
- 数据结构学习-指针与函数
- 数据结构学习记录-指针与数组
- 指针 数据结构 函数
- C++学习之普通函数指针与成员函数指针
- C++学习之普通函数指针与成员函数指针
- c++学习日记/函数指针与指针函数
- 数据结构学习记录-指针与动态内存分配
- C与指针学习笔记——函数指针
- C语言学习篇-10指针与字符串、函数指针
- 指针函数与函数指针
- 指针函数与函数指针
- 函数指针与指针函数
- 指针函数与函数指针
- 函数指针与指针函数
- 函数指针与指针函数
- 函数指针与指针函数
- 函数指针与指针函数
- 函数指针 与 指针函数
- MyBatis 框架 8
- 栈和队列及模拟实现
- 使用java完成二分算法
- java SE 知识总结
- PCA的数学原理
- 数据结构学习-指针与函数
- 初始hive
- Hibernate 简介
- 解决等值线生成过程存在的二义性
- 运用for语句来判断数组中值得大小
- java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config解决方案
- AttributeError: module 'os' has no attribute 'mknod'
- RSA加密算法验证(C#实现)
- 并发编程(2)-多个线程多个锁