简述static关键字、void与void *(void指针)、函数指针
static关键字
1.修饰局部变量,延长局部变量的生命周期。
使变量成为静态局部变量,在编译时就为变量分配内存,直到程序退出才释放存储单元。
2.修饰全局变量,限制全局变量的使用范围为本文件中。
全局变量默认为静态全局变量,在编译时就为变量分配内存,直到程序退出才释放存储单元。
3.修饰函数,限制函数的使用范围为本文件中。
使函数成为静态函数,对函数的连接方式产生影响。如果想让内部函数被外界引用,可在函数前添加extern修饰。
void与void *(void指针)
1.void 即‘无类型’,void * 即‘无类型指针’,可以指向任何数据类型。
例如:
int * print;
void * pvoid;
pvoid = print;
2.void的作用
a.对函数返回的限定,例如:
void func (int ,int)
b.对函数参数的限定,例如:
int func(void)
3.void *的作用
a.作为形参,在函数中传递,表示任意类型,例如:
void * func (void *para1,void *para2)
函数指针
a.函数指针是什么?
一个函数占用一段连续的内存地址,当调用一个函数时,实际上是跳转到函数的入口地址,执行函数体代码,然后返回。
函数的入口地址怎么确定呢,它是由函数名标记的,实际是函数名就是函数的入口地址。
函数指针是一种特殊的指针,它指向函数的入口。
b.如何定义一个函数指针变量?
定义两个函数
int func1(int arg1,char arg2)
int func2(char arg2)
定义两个函数指针变量
int (* pfunc1) (int,char) = func1
int (* pfunc2) (char) = func2
只有相同的函数指针类型才可以赋值。
c.如何区别两个函数
函数指针类型是由函数签名决定的,函数签名是函数的身份证,不同类型函数的函数签名是不一样的。
同理,具有相同函数签名的两个函数是同一个函数。
函数签名的组成部分包括:函数名,函数形参的有序列表,函数返回值类型。
d.函数指针的组成部分包括:函数形参的有序列表,函数返回值类型。
简述static关键字、void与void *(void指针)、函数指针的更多相关文章
- C基础知识(6):指针--函数指针与回调涵数
函数指针 函数指针是指向函数的指针变量. 通常我们说的指针变量是指向一个整型.字符型或数组等变量,而函数指针是指向函数. 函数指针可以像一般函数一样,用于调用函数.传递参数. #include < ...
- 实习第一个月总结(const关键字、条件编译、volatile关键字、#和##的作用、函数指针)
C语言中const关键字的作用: 修饰局部变量或者全局变量,表示变量n的值不能被改变了 修饰指针,分为常量指针与指针常量,也可以两者结合 常量指针指向的值不能改变,但是这并不是意味着指针本身不能改变, ...
- C语言结构体及typedef关键字定义结构体别名和函数指针的应用
结构体(struct)的初始化 struct autonlist { char *symbol; struct nlist nl[2]; struct autonlist *left, *right; ...
- C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组
#include<stdio.h> #include<stdlib.h> #include<windows.h> /* 举列子说明什么是函数指针 */ //以一个加 ...
- 指向函数的指针 ------ 函数指针(function pointer)
函数指针: 指向函数的指针, 首先是一个指针, 这个指针指向一个函数. 函数具有可赋值给指针的物理内存地址,一个函数的函数名就是一个指针,它指向函数的代码.一个函数的地址是该函数的进入点,也是调用函数 ...
- C 函数指针 函数指针数组 转移表
内容来自<c和指针>,整理后方便个人理解 高级声明 cdel程序可以方便的给出声明的释义 指向函数的指针 int ( *f ) ( int n_values, float amount ) ...
- C++基础——函数指针 函数指针数组
==================================声明================================== 本文版权归作者所有. 本文原创,转载必须在正文中显要地注明 ...
- C语言指针系列 - 一级指针.一维数组,二级指针,二维数组,指针数组,数组指针,函数指针,指针函数
1. 数组名 C语言中的数组名是一个特殊的存在, 从本质上来讲, 数组名是一个地址, 我们可以打印一个指针的值,和打印一个数组的值来观察出这个本质: int nArray[10] ={ 0 }; in ...
- STL函数static void (* set_malloc_handler(void (*f)()))()与函数指针解析
在C++ STL的SGI实现版本中,一级空间配置器class __malloc_alloc_template中有一个静态函数的实现如下: static void (*set_malloc_handle ...
随机推荐
- sudoku作业
1.Github项目地址: https://github.com/ataiyang/ls 2.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟 ...
- 第6周-接口、内部类与Swing
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...
- 201521123057 《Java程序设计》第5周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过? ...
- 201521123016 《Java程序设计》第5周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过? ...
- [UIKit学习]02.关于UIButton
按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置 按钮也是一种容器,在这一点上跟UIView类似 按钮的三种状态 normal(普通状态) 默认情况(Default) 对 ...
- node 当中的 cnpm和npm 的区别和使用
在安装nodejs之后会有npm命令 打开命令符输入之后 输入node -v(记得-v前空格)查看版本信息 如果显示出来了就说明安装成功 然后 npm 可以安装node插件 cnpm使用的是淘宝网 ...
- 《HiBlogs》重写笔记[1]--从DbContext到依赖注入再到自动注入
本篇文章主要分析DbContext的线程内唯一,然后ASP.NET Core的注入,再到实现自动注入. DbContext为什么要线程内唯一(非线程安全) 我们在使用EF的时候,可能使用相关框架封装过 ...
- javascript篇-----数据类型
ECMAScript中一共有6种数据类型,其中包括5种基本数据类型(Undefined,Null,Boolean,Number,String)以及一种复杂数据类型(Object).[ES6增加多了一种 ...
- E - 今年暑假不AC HDU - 2037
"今年暑假不AC?" "是的." "那你干什么呢?" "看世界杯呀,笨蛋!" "@#$%^&* ...
- springmvc 格式化返回日期格式
<mvc:annotation-driven conversion-service="conversionService"> <mvc:message-conve ...