c语言学习之基础知识点介绍(十五):函数的指针
一、函数的指针的介绍
/* 函数指针:
函数的指针,本质上一个指针 指向函数的指针,就是一个函数指针。 回忆:我们写的源代码编译成二进制的指令集,一串交给CPU执行的指令 先存在内存里面,然后CPU读取内存里的指令,既然存到内存里面,一定有一个地址 所以,我们可以定义一个指针变量保存函数的地址,那么这样的指针变量就是函数指针。 函数指针定义语法:
返回值类型 (*指针变量)(参数列表); 例: void (*pTest)(); //变量名:pTest 这个指针指向的是无返回值无参数的函数类型。 void (*pTest2)(int);//变量名:pTest2 这个指向的是无返回值有1个int类型参数的函数。 tips:直接复制函数头,把大括号去掉,把函数名用一个小括号括起来,函数名前面加一个*,函数名重新改成变量名。 指针变量赋值: 语法:
指针变量名 = 函数名; 例: pTest = test; 因为函数名本身就是一个指向自己函数的地址 注意:函数名后面千万不要加()。 在声明的时候初始化 返回值类型 (*指针变量名)(参数列表) = 函数名; 例:void (*pTest)() = test; 函数指针的使用:
1.指针变量名(参数列表);
pTest();
pTest2(90); 2.(*指针变量名)(参数列表); 例: (*pTest)();
(*pTest2)(90);
*/
二、函数指针的应用
1、把函数当做参数传递。
2、把函数当做返回值。
/*
类似于支付宝问题,银行不可能把操作银行卡的权限交给支付宝,所以,当用户选择银行后,需要把该调用的银行付款方法传递给支付宝,然后支付宝再去调用(只是一个比喻,现实中支付宝不会这样)。具体的代码编写,可以自己动手,我就不传了。
*/
三、结构体指针的使用
/*
结构体的变量也要开辟空间,所以也会有一个内存首地址
那么我们把这个结构体变量的内存首地址保存起来,就是结构体指针
定义的语法:
类型 *指针变量名;
struct 结构体名 *指针变量名;
结构体指针的赋值:
指针变量名 = 地址;
指针变量名 = &结构体变量;
例如:Person p = {"刘德华",88};
Person *ppt;
ppt = &p;
声明的时候初始化
Person p = {"刘德华",88};
Person *ppt = &p;
通过结构体指针访问结构体变量的成员:
1.使用*来访问
语法: (*指针变量名).成员名;
(*ppt).age;
2.使用->来访问
语法: 指针变量名->成员名;
ppt->age;
赋值:
1.使用*来访问
语法: (*指针变量名).成员名 = 数据;
(*ppt).age = 16;
2.使用->来访问
语法: 指针变量名->成员名 = 数据;
ppt->age = 16;
*/
#include <stdio.h>
typedef struct{
char name[];
int age;
}Person;
int main(int argc, const char * argv[]) {
Person p = {"刘德华",};
Person *ppt;
ppt = &p;
//*ppt; //*ppt 就等同于p
// printf("age=%d\n",(*ppt).age);
printf("age=%d\n",ppt->age);//
(*ppt).age = ;
printf("age=%d\n",p.age);//
ppt->age = ;
printf("age=%d\n",p.age);//
return ;
}
c语言学习之基础知识点介绍(十五):函数的指针的更多相关文章
- oc语言学习之基础知识点介绍(五):OC进阶
一.点语法介绍 /* 以前封装后,要给属性赋值,必须调用方法 这样做,有两个缺点: 1.代码量多,调用方法要写的东西多. 2.看起来并不像是给属性赋值,也不像取值. 我们用点语法就可以更好的解决! 点 ...
- c语言学习之基础知识点介绍(五):关系运算式和逻辑运算式
本节主要说关系运算式和逻辑运算式. 一.关系运算式 1.等于(==):判断左边的表达式是否等于右边的表达式 2.大于(>):判断左边的表达式是否大于右边的表达式 3.大于等于(>=):判断 ...
- c语言学习之基础知识点介绍(十四):指针的进阶
一.指针的加.减法运算 /* 1.加法运算 1).可以跟整数进行加法运算,得到的还是一个地址 公式: 地址 + 1 = 地址 + 1 * 类型所占的字节数 地址 + n = 地址 + n * 类型所占 ...
- c语言学习之基础知识点介绍(十):内存空间模型、地址解释及指针变量
一.内存 /* 内存: 存在内存里的. 内存分了N多个小空间,每个小空间1个字节 每个小空间有它自己的地址.每个地址之间差1 int类型占用4个字节,等于占了4个空间(有4个地址),不需要记住4个地址 ...
- c语言学习之基础知识点介绍(三):scanf函数
本节继续介绍c语言的基础知识点. scanf函数:用来接收用户输入的数据. 语法:scanf("格式化控制符",地址列表); 取地址要用到取地址符:&(shift+7) 例 ...
- c语言学习之基础知识点介绍(二):格式化控制符和变量的补充
上节简单介绍了c语言中的一些基础知识点,本节将对之前介绍的不够详细的知识点进行补充. 格式化控制符的消息介绍: %d的其他控制符: 1.%md:m代表这个整数位占用多少位,m是一个整数.实际数字不足的 ...
- c语言学习之基础知识点介绍(十):数组
本节主要介绍数组. 一.数组 /* 数组:一个变量可以存n个变量. 语法:类型 数组名[长度(正整数)]; 例如:int score[5];//定义了一个int类型的数组,长度为5,可以保存5个数据. ...
- c语言学习之基础知识点介绍(二十):预处理指令
一.预处理指令的介绍 预处理命令:在编译之前触发的一系列操作(命令)就叫预处理命令. 特点:以#开头,不要加分号. #include: 文件包含指令 把指定文件的内容复制到相应的位置 #define: ...
- c语言学习之基础知识点介绍(十二):结构体的介绍
一.结构体的介绍 /* 语法: struct 结构体名{ 成员列表; }; 切记切记有分号! 说明:成员列表就是指你要保存哪些类型的数据. 注意:上面的语法只是定义一个新的类型,而这个类型叫做结构体类 ...
随机推荐
- nmon for linux
nmon(为Nigel's performance Monitor的简写) for linux工具是 IBM开源的在POWER, x86, x86_64, Mainframe & now AR ...
- sql server Case when 的用法
sql Case 仅仅返回第一个符合条件的值,剩下的Case部分将会被自动忽略. Case 的使用有两种格式:简单Case函数和Case搜索函数. 简单Case 函数: Case sex when ' ...
- Javaweb之JavaScript结合(二)
1.js的String对象 ** 创建String对象 *** var str = "abc"; ** 方法和属性(文档) *** 属性 length:字符串的长度 *** 方法 ...
- 【CSS3】Advanced3:Universal, Child, and Adjacent Selectors
1.Universal selectors eg:#target*{ } 2.Child selectors < something immediately nested within some ...
- aix挂载centos 的nfs
centos作为服务器,提供nfs文件系统,aix作为客户端,挂载centos的指定目录 (1)NFS的安装配置:centos 5 : yum -y install nfs-utils portmap ...
- 一些有用的Azure工具
目前,Azure 没有为客户提供监控和管理托管服务的完整解决方案.为了获取网络信息,speedtest.net 提供了一种工具,用于测量响应时间.带宽和整体连接质量.可以使用 Matthew Roso ...
- Linux设备驱动编程中的中断与定时器处理
所谓中断是指CPU在执行过程中,出现某些突发时间急待处理,CPU必须暂停执行当前的程序,转去处理突发事件,处理完毕后CPU又返回原程序被中断的位置并继续执行. 中断分为(根据中断源来分): 内部中断 ...
- 安装Ambari
1.yum install pdsh 这玩意一般系统都没带 2.检查下umask码,022是需要的 3.获取ambari的官方repo文件,并安装repo文件 wget http://publi ...
- HDOJ-ACM1012(JAVA)
这道题很简单,主要是弄懂题意和注意输出: 输出的完整结果如下: n e - ----------- 0 1 1 2 2 2.5 3 2.666666667 4 2.708333333 5 2.7166 ...
- Codeforces Round #226 (Div. 2)A. Bear and Raspberry
/* 贪心的找到相邻两项差的最大值,再减去c,结果若是负数答案为0. */ 1 #include <stdio.h> #define maxn 105 int num[maxn]; int ...