从函数或方法返回内存
- 动态内存的另一个常见用途是让函数申请并返回一个指向内存块的指针。
- 如果想要让函数返回一个以上的值,或者返回数组之类比较复杂的数据结构的话,那么就需要用到这个知识。
基本思路
- 在函数里调用new语句被某种对象或数据类型分配一块内存,再把那块内存的地址返回给主程序,主程序在完成相关操作后,使用delete语句释放内存。
代码实现
#include <iostream>
using namespace std;
int *newInt(int value);//声明一个函数,由int *知其返回值为指向整型的一个地址
int main()
{
int *x = newInt(20);//定义指针类型x
cout << *x;
delete x;//释放地址
x = NULL;//指针填充NULL
return 0;
}
int *newInt(int value)
{
int *myInt = new int;//申请一个整型内存块(4个字节),并将指针(myInt)指向内存块的地址
*myInt = value;//解引用,赋值
return myInt;
}
为什么不让一个函数返回一个指向其内部变量的指针?
-
局部变量在栈里,函数结束后就自动释放了,返回其指针没有意义。
函数指针与指针函数
函数指针
- 是一个指针。
- 是一个指向函数首地址的指针。
声明:
int (*p)();//fun(int a,int b);
赋值:
p=fun;
调用
int z=(*p)(a,b)
指针函数
- 就是一个函数,返回的数据类型是一个指针,本节课例题就是。
相关代码
#include <stdio.h>
int fun(int x, int y);
int main()
{
int i,a,b;
int (*p)(); //声明函数指针
p = fun; //给函数指针p赋值,使它指向函数fun
printf("请输十个数字:\n");
for(i=0;i<10;i++)
{
scanf("%d",&b);
a = (*p)(a,b); //通过指针p调用函数fun
}
printf("The Max Number is:%d",a);
return 0;
}
fun(int x,int y)
{
int z;
z = (x>y)?x:y;
return(z);
}