2020-09-25C++学习笔记引用2:二级指针形参与指针形参的使用方法和区别重难点,主看综合代码(1、指针形参2、引用形参3、二级指针形参4、指针引用形参)

2020-09-25C++学习笔记引用2:二级指针形参与指针引用搭配做形参的使用方法区别重难点,注意事项主看综合代码(1、指针形参2、引用形参3、二级指针形参4、指针引用形参)

1、指针引用

#include "iostream"
using namespace std;

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

int getTe(Teacher **myp )
{
	Teacher *p = (Teacher *)malloc(sizeof(Teacher));
	
	if (p ==NULL)
	{
		return -1;
	}
	memset(p, 0, sizeof(Teacher));
	p->age = 33;

	*myp  = p; //
	return 0;
}

//指针的引用而已
int getTe2(Teacher*  &myp)
{
	myp = (Teacher *)malloc(sizeof(Teacher));
	myp->age = 34;

	return 0;
}

void main()
{
	Teacher *p = NULL;
	//getTe(&p);
	getTe2(p);

	printf("age:%d \n", p->age);
	system("pause");
}

2、常引用

2.1在C++中可以声明const引用

const Type& name = var;

const引用让变量拥有只读属性

2.2使用字面量常量初始化const引用

思考:

1、用变量对const引用初始化,const引用分配内存空间了吗?
2、用常量对const引用初始化,const引用分配内存空间了吗?

void main()
{
	const int b = 10;
	printf("b:%d", &b);

	//int &a1 = 19; 如果不加const编译失败
	const int &a = 19;
	printf("&a:%d \n", &a);

	system("pause");
}

综合代码

1、指针形参

2、引用形参

3、二级指针形参

4、指针引用形参

#include <iostream>
#include <string>
using namespace std;
/* 一级指针与引用的对比
 *
 */
struct student
{
	char *name;
	int age;
};
void yinyong(student &student1)
{
	student1.name=(char *)"xiaoming";
	student1.age=10;

	printf("name:%s,age:%d\n",student1.name,student1.age);
}
void zhizhen(student *student2)
{
	student2->name=(char *)"xiaohong";
	student2->age=12;

	printf("name:%s,age:%d\n",student2->name,student2->age);
}
/*二级指针与引用的对比
 */
int two_pinter(student **student3)
{

//	student3=new student;//这里分配的内存空间后来会被释放掉

	
//	if(student3==NULL) return -1;
	
	(*student3)->name=(char *)"xiaoli";
	(*student3)->age=10;
//	printf("name:%s,age:%d\n",(*student3)->name,(*student3)->age);
}//二级指针的另一种写法
int two_pinter1(student **student3)
{

	student *p=new student;//*p是常量,若p=studengt3,虽然*p是存储的students1的地址但它已不是指针类型,
						   //无法实现*p->name,*p->age,这个错误不能再犯	
	if(*student3==NULL) return -1;
	
	p->name=(char *)"xiaoding";
	p->age=12;

	*student3=p;
//	printf("name:%s,age:%d\n",(*student3)->name,(*student3)->age);
}
int  two_yinyong(student *&student4)
{
//	student4=new student;
//	if(student4==NULL) return -1;
	student4->name=(char *)"xiaoxiao";
	student4->age=18;
//	printf("name:%s,age:%d\n",student4->name,student4->age);
}
//常引用

int main(int argc,char *argv[])
{
	student students;
	student *students1=new student;//定义指针型形变量必须初始化。
//常引用
	char a=10;
	const char &m=a;
	char *p = (char *)&m;
    *p=11;
//	m=12;m为只读属性无法修改
	printf("a:%d,m:%d,*p:%d\n",a,m,*p);
//字面量常引用
	const char &n=20;
	printf("n:%d\n",n);
//	char &n=20;是 error
	yinyong(students);
	zhizhen(&students);
	two_pinter(&students1);
	printf("name:%s,age:%d\n",students1->name,students1->age);
	two_yinyong(students1);
	printf("name:%s,age:%d\n",students1->name,students1->age);
	two_pinter1(&students1);
	printf("name:%s,age:%d\n",students1->name,students1->age);
	return 0;
}

在这里插入图片描述

标题二级指针具体示意图

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值