C语言基础-指针和函数的补充21
来源:互联网 发布:linux php编译 编辑:程序博客网 时间:2024/06/15 04:09
1.指针作为函数参数
1. 指针作为函数的参数.
1).效果
在函数的内部可以通过这个参数指针去修改实参变量的值.
2).当函数的返回值有多个的时候.
3).地址传递.
4).如果函数的参数是1个指针.函数希望传递给调用者1个信息.
函数内部只会去取指针指向的变量的值而不会修改.
那么这个时候这个参数指针就是要const修饰.
2. 指针作为函数的返回值
1).指针当然可以作为函数的返回值.
但是.不能返回局部变量的地址.
换句话说:你返回的指针指向的变量一定要保证在函数结束之后,那个空间没有被回收还存在.
2).如果你就是要返回1个指针,那么你就要保证这个指针指向的空间在函数结束以后仍然存在.
那么这个时候,就可以将空间申请在堆区.然后返回堆区的地址.
一定要记得,调用者使用了完之后,记得free
3.注意.
1).可以返回局部变量的值.但是不能返回局部变量的地址.
2).如果你非要返回指针,那么就应该把这个空间申请在堆区.
4. 案例:
写1个函数.传入1个 1-7的星期数,返回对应的英文星期天.
void getWeekDay(int day);
1).如果返回值是字符串,那么返回值的类型就写char*
2).直接返回字符串常量.
5. 申请在常量区的空间.不会被回收的.
直到程序结束的时候才会回收.
不能改:
以字符指针存储在常量区的字符串数据不能改.
其他存储在常量区的数据是可以改的.
2.函数指针
1.我们之前学习的指针.
一般情况都是指向另外1个变量.
int num = 10;
int* p1 = #
指针是指向内存中的1个字节空间的.
2.程序在运行的时候.会将程序加载到内存.
程序中主要有代码/指令.
代码段中主要存储程序的代码.而程序的代码就包括函数.
所以,函数肯定要存在内存的代码段中.
既然函数要存储在内存中那么肯定要用1块空间来存储.
那么这个块空间一定有1个地址.n
那么我们就可以声明1个指针,存储这个函数的地址.让这个指针指向这个函数.
使用指针来间接的调用函数.
优势:调用函数有了两种方式.
->直接使用函数名调用
->使用指向函数的指针间接调用.
3.指向函数的指针的声明
1). 1个指针函数的指针.并不是任意的函数都可以指向.
而是有限定的.要求指向的函数的返回值类型和参数描述必须要与指针的描述一样.
2).声明语法
返回值类型 (*指针名)([参数列表]);
void (*pFunction)();
表示声明了1个指向函数的指针,名字叫做pFunction.
这个指针只能指向没有返回值,并且没有参数的函数.
int (*pFun)(int num1,int num2);
表示声明了1个指向函数的指针,名字叫做pFun.
这个指针只能指向返回值为int类型并且有两个整型的参数的函数.
4).指向函数的指针的初始化.
1).取到符合指针条件的函数的地址.
函数的名称就代表函数的地址.
2).将地址赋值给指针变量.
直接将符合条件的函数的名称赋值给这个指针.
3).注意.
函数名代表函数的地址.
不要函数名加小括弧.如果加了小括弧,就代表执行这个函数拿到这个函数的返回值.
5).如何使用指针来间接的调用指针指向的函数呢?]
void (*pFunc)() = test; //pFunc指针就指向了test函数
pFunc();
(*pFunc)();
有参数就给,有返回值就接.
6).小技巧.
如果要定义1个指针指向1个函数
拷贝这个函数头.删除函数名用小括弧代替里面写上*加指针名称
- C语言基础-指针和函数的补充21
- C语言基础:指针初级(补充)
- C语言基础:C语言指针(4) - 补充一点关于指针的小知识
- C语言基础 函数指针
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- C语言函数指针基础
- Android 编程下 SQLite 大数据量操作优化
- JavaScript对象
- JavaScript对象
- 使用sklearn做单机特征工程
- 如何设置页面元素的显示和隐藏?
- C语言基础-指针和函数的补充21
- .NET下 JSON 的一些常用操作
- 一文看懂NB-IoT所有猫腻:华为如此青睐的原因?
- Android端上传图片到后台,存储到数据库中 详细代码
- arm linux内核源码级调试器kgdb配置与使用
- [LeetCode]Longest Substring Without Repeating Characters
- DOM模型中的常用对象及其方法?
- 005 使用log4j2输出日志(重构)
- History对象,location对象