关于指针(指针常量/常量指针、指针函数/函数指针)
来源:互联网 发布:悬浮球软件 编辑:程序博客网 时间:2024/06/05 20:25
指针常量(常指针):char * const p const位于星号右侧,const修饰指针本身,即指针本身是常量,指针指向地址不可改变,但所指地址变量值可以改变。
常量指针(指向常变量的指针):const char *p cosnt位于星号左边,const修饰指针所指向的变量,即指针本身指向的地址可以改变,但它所指的内容不可以被修改。
指针函数:函数的返回值是一个指针类型。
函数指针:指向一个函数入口地址的指针。
int *p[n];——指针数组,每个元素均为指向整型数据的指针。
int (*)p[n];——指向一维数组的指针。
int *p();——函数带回指针,指针指向返回的值。
int (*)p();——p为指向函数的指针。
指针函数与函数指针
如下两个例子
1. int* lpfun(int,int);
2. int (*lpfun)(int,int);
第一种是我们熟悉的函数指针,即函数的返回值为int类型的指针
第二种一定要用括号把*号和lpfun括起来,这种类型与第一种不一样,是指向一种函数地址的指针。这个函数的返回类型是int型,实参也为int型。
#include <stdio.h>int* lpfun1(int,int); //声明一个返回指针为int类型的函数int lpfun2(int,int); //普通函数typedef int (*lpfunPointer)(int,int); //声明一个函数指针类型,用于保存它要指向的函数地址void main(){ int *result=lpfun1(10,20); printf("%d\n",*result); delete result; //删除堆中的指针 result=0; //使指针无效 lpfunPointer p=lpfun2; //保存lpfun2函数的地址,函数名也是一种指针 printf("%d\n",p(12,60)); //调用带参的函数}/*********************************************************************************************** lpfun1过程说明: 如果我们在此函数中这样写: int *p=NULL; *p=x+y; return p; 这样的写法是错误的,因为在函数中声明的变量在函数执行完后就不存了,即此是p不存了,是个无效指针,就不能得到这个返回值。 而如果在堆中开辟一小内存来存放,并在完成后由手工来释放,则我们可以用int* p=new int;来创建,这样即使函数没了,但这个p还是存在于堆中的,由此我们会看到在main()中用了一个int *result=lpfun1(10,20)把堆中的p指针指向result指针,再手工释放。 这样就不会内存泄露了。谨记:永远不要从函数中返回局部自动变量的地址。******************************************/int* lpfun1(int x,int y){ int *p=new int(0); *p=x+y; return p;}int lpfun2(int x,int y) { return x+y;}
0 0
- 关于指针(指针常量/常量指针、指针函数/函数指针)
- 指针函数,指针常量,函数指针,常量指针
- 指针函数和函数指针,指针常量和常量指针
- “指针的爱情故事”(指针\多级指针 详解,常量指针\指针常量\常量指针常量,数组指针\指针数组,函数指针\指针函数)
- 函数指针、指针函数、常量指针、指针常量、指向常量的常量指针
- (指针常量,常量指针)-(函数指针,指针函数)-(指针数组,数组指针)
- (指针常量,常量指针)-(函数指针,指针函数)-(指针数组,数组指针) 收藏
- 指针常量与常量指针,函数指针与指针函数,指针的指针
- 指针常量和常量指针、函数指针和指针函数、指针数组和数组指针
- 常量指针、指针常量、指针函数、函数指针、指针数组、数组指针区别在哪里?
- 指针常量、常量指针;指针数组、数组指针;指针函数、函数指针
- 3.常量指针、指针常量、指针数组、数组指针、指针函数、函数指针
- 指针(数组、常量、函数)
- 常量指针 指针常量
- 常量指针 指针常量
- 指针常量,常量指针
- 常量指针&&指针常量
- 常量指针 指针常量
- Mac系统下对apk文件重新签名
- 设计模式-六大原则
- 让linux支持NTFS文件系统-45
- java 解压,压缩文件夹
- Redis采用Sentinel实现主从切换
- 关于指针(指针常量/常量指针、指针函数/函数指针)
- KMDF Version History
- 分割窗口
- 欢迎使用CSDN-markdown编辑器
- 可执行文件(ELF)格式的理解
- PullToRefreshView优化
- maven插件mybatis-generator生成代码配置
- JMS教程(六)
- 图像增强—灰度拉伸