C/C++指针 引用

通过代码+注释来说明问题

#include <stdio.h>

struct box 
{
	int a;
	int c;
	box(int i,int j)
	{
		a=i;c=j;
	}
};

void func1();
void func2(int *a,int *b);
void func3(int *p);
void func4(int &c);
void func5(int *&p);

void main()
{
	func1();

	int a=111;
	int b=1234;
	func2(&a,&b);// & 此时为取地址
	printf("%d %d\n",a,b);

	int *p=NULL;
	func3(p);
	printf("%p\n",p);

	int c=1111;
	func4(c);
	printf("%d\n",c);

	int *q=NULL;
	func5(q);
	printf("%p\n",q);

}

void func1()
{
	int num=100;
	int block=1000;
	box bBOX(3,3);
	
	// 指针是一个变量,指针变量p中存储的是(指向num代表的内存单元的)地址
	int *p=#
	
	// 引用和原来的变量num是一个东西,r和num都指的是num所代表的存储单元
	int &r1=num;
	box &r2=bBOX;
	
	// 指针可以不用初始化,但引用必须初始化
	int *ptrA;
	
	// 指针可以为NULL,但是引用不可以为空
	int *ptrB=NULL;
	
	// 有const指针,但没有const引用
	
	// 指针可以有多级指针,但是引用只能有一级
	int   *p1 = #
	int  **p2 = &p1;
	int ***p3 = &p2;
	
	// 指针的值可以改变,但是引用是不可以改变的
	p=█
	
	// sizeof(指针)得到的是指针的大小,sizeof(引用)得到的是所指变量(对象)的大小
	printf("%d %d %d \n",sizeof(p),sizeof(r1),sizeof(r2));
	
	// 指针和引用的自增(++)意义不同,引用根本不能进行自加操作
	p1++;
	p2++;
	p3++;
	
	// & 一定要将 引用 和 取地址 区分开
	
	// 
}

// 参数指针型形参变量,但这是一种拷贝,注意函数体内
// 修改的是指针所指的空间,不是指针本身的空间,
// 所以不要认为这不是一种拷贝
void func2(int *a,int *b)
{
	int c;
	 c = *a;
	*a = *b;
	*b =  c;
}

// 参数指针型形参变量,但这是一种拷贝
void func3(int *p)
{
	int a=100;
	p=&a;
}

// // 参数引用型(普通类型)形参变量
void func4(int &c)
{
	int a=100;
	c=a;
}

// 参数引用型(指针)形参变量,传递的是指针的本身,不是临时拷贝
void func5(int *&p)// 得到(取指针p的地址的)变量,操作的是存储指针变量的空间
{	
	int a=100;
	p=&a;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值