c++ 指针,引用,* 与&

对于一个函数,用指针当形参,传递的值是实参指针的值,是一个int,而在函数中对这个指针即int做任何操作是不影响外部的指针的,但是如果修改指针指向数据的值,则就改变了数据的值。

指针:

*是 获得地址所对应的数据的信息。

单指针。

注意小心越界。还有就是对于函数使用指针做形参的情况。指针做参数,实参将地址传递给形参,对形参地址的操作不会改变实参的地址,而形参指向地址的数据进行更改时,会对实参指向的值也进行改动:

void cpyAToB(char *a,char *b){
	//a=b;//直接改变形参的地址是无法改变实参的地址的
	while(*b)
		*a++=*b++;//根据直接改变指针指向数据的值,实现对实参的更改操作。
	*a='\0';
}

指针使用时,

strNode* s1,*s2;
要在一个语句中声明两个指针,必须写两个*,而不是将strNode*看做为一个整体的指针数据结构。

对于多重指针例如

char **p; 创建多重指针时,为指针分配了多个地址,一个地址指向另一个地址,直至指向目标。  这类指针的初始化必须以一个已有的存在的指针类进行初始化,或者指向空。

对于指向NULL;

char*** P=NULL;
char*** Q='\0';
NULL其实就是0;定义指针等于NULL,即使其指向0的地址,而0的地址是不可寻址的,所以指针就为空了,而对于'\0','\0'就是int 0;举例:

int	p='\2';
这里就是p=2.

指针类似于数组,一个单指针就是一单数组,则一个多重指针,类似与一个多维数组,则当声明一个多重数组时,譬如一个int*** p;内存为它提供了三个位置放地址,一个放

p.p中存放的地址是指向 指向  指向int的指针 的指针的地址。 *p中的地址是  指向     指向int的指针    的指针的地址,**p中的地址是 指向 int的指针的地址,只有***p中存放的才是int。

而对于一个这样的多重指针的初始化,初始时是 int***     p;是对p进行初始化,所以等号右边应该是地址,是指向 指向 指向int 的指针 的指针的 指针的地址。要对其赋值的话,就必须用一个低一级的指针,即int**  q;然后要对q赋值要有一个int *  t;然后t需要一个int。。。。

int n=0;
	int* t=&n;
	int** q=&t;
	int*** p=&q;


指针与数组与函数:

int *p[n];//指针数组,指针保存在数组中,p[i]为指针
	int (*p)[n];//定义一个指向含有n个元素的以为数组的指针。
	int *p();//定义一个返回int*指针的函数
	int (*p)();//p为一个返回整数的函数指针。
分析的方法,带括号则*是和p在一起的,p就是一个指针,不带括号是,是int与*在一起,组成一个int*,即为指向int的指针,是一种数据类型。



引用:

&是对数据获得地址的操作。

&的用法与*类似,但引用就是给数据取一个别名,对别名的任何操作都相当与直接对原来的数据进行操作。

int p=2;
	int &q=p;
	q++;
	p++;

引用传值时可以进行对形参的操作就相当与对实参的操作。

void swapp(int& a,int &b){
		int c=b;
		b=a;
		a=c;
	}

	int p=2;
	int q=3;
	swapp(p,q);


&符号还可以表示与运算:

unsigned	int p=25525;
	unsigned int q=124124;
	p=q&p;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值