C++指针的引用

// 指针的引用.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

struct Teacher
{
	char name[64];
	int age;
};

int GetTeacherAge(Teacher* *p)//指针p在内存中的地址
{
	Teacher *tmp = NULL;
	if (p == NULL)
	{
		return -1;
	}
	//tmp = (Teacher *)malloc(sizeof(Teacher));//这句话就是分配内存空间//C语言malloc
	tmp = new Teacher ();//等价于上面的语句//C++用new
	if (tmp==NULL)
	{
		return -2;
	}
	tmp->age = 33;
	*p = tmp;// p的值是一个地址,*p就是修改这个地址里面的值//因为p是二级指针所以*p储存的也是一个地址所以将tmp指针赋值给*p
	//如果不写着句下边的pt就无法指向tmp

   
	return 0;
}

//利用指针的引用
int GetTeacherAge2(Teacher* &myp)//函数参数为指针
{
	//给myp赋值就相当于给mian函数中的pt赋值
	myp = new Teacher();//给指针分配内存空间
	if (myp ==NULL)
	{
		return -1;
	}
	myp->age = 36;

}

void FreeTeacher(Teacher *pt)
{
	if (pt==NULL)
	{
		return;
	}
	free(pt);//将指针所指向的内存空间删掉
}
//常引用
void CoutTeacherAge(const Teacher &myp1)
{
	//常引用,使参数变量拥有了只读属性
	//myp1.age = 32;//这一句就会报错,因为不能修改

	//除了const int &x = y;这种以变量为右值的定义方法还有
	//const int &x = 40;这种方法也可以,这种方法给x自动分配了内存空间,因为是常引用
	//int &x = 40;就会报错,因为40是值没有内存空间
	cout << "myp1:" << myp1.age << endl;
}

int main()
{
	Teacher *pt;
	GetTeacherAge(&pt);
	cout << "age: " << pt->age << endl;
	FreeTeacher(pt);

	GetTeacherAge2(pt);
	cout << "age: " << pt->age << endl;
	FreeTeacher(pt);
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值