动态内存的另一个常见用途是让函数申请并返回一个指向内存块的指针。掌握这个技巧很重要,尤其是在你打算使用由别人编写的库文件时。
如果不知道这个技巧,就只能让韩桑树返回一个简单的标量值,如整型、浮点型或字符型。换句话说,它既不能返回一个以上的值,也不能返回数组之类比较复杂的数据结构。
这个技巧的基本思路:在函数里调用new语句为某种对象或某种基本数据类型分配一块内存,再把那块内存的地址返回给程序的主代码,主代码将使用那块内存并在完成有关操作后立刻释放。
#include <iostream>
using namespace std;
int* newInt(int value);
int main()
{
int *x = newInt(20);
cout << *x << endl;
delete x;
x = NULL;
return 0;
}
int *newInt(int value) //指针函数
{
int *myInt = new int;
*myInt = value;
return myInt;
}
传址引用
#include <iostream>
using namespace std;
void swap(int *x, int *y);
int main()
{
int a, b;
a = 3;
b = 5;
swap(&a, &b);
cout << "a = " << a << "\n";
cout << "b = " << b << "\n";
return 0;
}
void swap(int *x, int *y)
{
#if 0
int temp;
temp = *x;
*x = *y;
*y = temp;
#endif
#if 1
*x ^= *y;
*y ^= *x;
*x ^= *y;
#endif
}
指针函数和函数指针:
函数指针:指向函数首地址的指针变量成为函数指针
#include <stdio.h>
int fun(int x, int y);
int main()
{
int a, b;
int (*p)(int, int); //声明函数指针
scanf("%d", &a);
p = fun; //给函数指针p赋值,使它指向函数f
printf("请输入10个数字: \n");
for(int i=0; i<10; i++)
{
scanf("%d", &b);
a = (*p)(a, b); //通过指针p调用函数f
}
printf("The Max Number is: %d \n", a);
return 0;
}
fun(int x, int y)
{
int z;
z = (x > y) ? x : y;
return(z);
}
指针函数:一个函数可以带回一个整型数据的值,字符型值和实型类型的值,还可以带回指针类型的数据,使其指向某个地址单元。(本次课程的第一个代码就是用的指针函数)