1、局部变量---全局变量---成员变量----new建立变量(对象)
#include
using namespace std;
char * get_string()
{
char *str="hello,lisi"; //字符串常量,直到程序退出时,才会消失-----类似于全局常量
return str;
}
int main()
{
char *str1=get_string();
cout<
}
//
#include
#include
using namespace std;
string get_string()
{
string str="hello,lisi";
return str; //返回的是 复制品
} //该函数退出后,真品str 就 消失了
int main()
{
string str1=get_string(); //main函数在真品消失前,得到了复制品,因此,get_string()函数结束了,main函数仍然能打印出复制品的内容
cout<
}
///
#include
#include
using namespace std;
string* get_string()
{
//string str="hello,lisi"; //使用该语句,str对象在本函数结束时,会自动消失;return返回的是,马上要消失的对象 的 地址
string *pstr=new string("hello,lisi"); //解决办法1:使用new来建立对象
return pstr; //
}
return 0; /// int main() 语法:------只是熟悉了语法,没有实用价值 typedef int (*pfun)(int a,int b); //定义了1个新的数据类型 pfun-----它叫函数指针类型--------由它定义的变量 肯定是 函数名------而且该函数的原型是严格要求的 int main() /* pfun fun1; //定义了 函数指针变量fun1 #include typedef void (*pfun)(int *context,int data); //pfun是函数指针类型。这是回调函数的通常格式:context是reslut的地址,data是某个数组元素的值 void sum(int *context,int data) void max(int *context,int data) return result; int main() int result_sum=foreach(array1,5,sum); return 0;
int main()
{
string* str1=get_string();
//delete str1;
cout<<*str1<
}
局部变量------>要改为 成员变量的例子
//main.cpp
#include
#include
using namespace std;
{
CManage manage;
manage.add_student();
manage.add_student();
manage.print_student_all();
return 0;
}
//Manage.h
class CManage
{
vector
public:
CManage();
virtual ~CManage();
void add_student();
};
//Manage.cpp
void CManage::add_student()
{
CStudent stu(1001,"zhangsan"); //stu使用局部变量 是 合适的,因为,下面要把它的复制品放到容器中,真品能自动消失,很好啊!
//vector
vec1.push_back(stu); //因为vec1为成员变量,所以,manage对象建立时,vec1就已经建立好了;在此次,可以直接使用,即调用它的push_back成员函数
return ;
}
2、回调函数
#include
#include
using namespace std;
int max(int a,int b) //根据函数指针类型pfun,定义的函数原型
{
int result=a>b?a:b;
return result;
}
{
int a=100;
int b=20;
int result=max(a,b);
cout<
fun1=max; //max函数原型,符合pfun的要求,所以max可以赋给变量 fun1
int result2=fun1(2000,300); //fun1是变量,但此时相当于max函数名了
cout<<"result2 is "<
}
回调函数的应用场合:------几乎都在 遍历函数中 使用 函数指针变量(函数名)
-------具有实用价值的回调函数 用法:
#include
using namespace std;
{
*context=*context+data; //相当于 result=result+array[i] 元素累加求和,由于context是地址变量,因此可以修改调用者的result
return ;
}
{
if(*context {
*context=data; //相当 result=array[i] 将最大的元素值 赋值给result。由于context是地址变量,因此可以修改调用者的result
}
return ;
}
int foreach(int array1[],int count,pfun fun)
{
int result=0;
for(int i=0;i
fun(&result,array1[i]);
}
}
{
int array1[]={10,6,12,4,3};
int result=foreach(array1,5,max);
cout<
cout<<"sum is "<
}