c++指针的和引用的使用

数据单位的访问方式:

直接存取:

按照变量地址存取变量值的方式

间介存取:    

将变量i的地址放在另外一个变量中,可以通过特殊的变量专门存放这些地址(指针)

指针变量和变量的指针:

一个变量的地址称为该变量的指针,

如果一个变量专门存放地址的,称为指针变量

定义指针变量:

(基类型)指针类型:

指针类型就是指向变量的数据类型

一般形式:

基类型 *指针变量名;

变量名前加*代表改该变量时指针变量

注意事项

1.定义指针变量时要指定基类型

2.一个变量的指针代表着该数据的地址,和数据类型

3.指针类型,数据类型  *

4.不能用整数给指针变量赋值

赋值方法:int*i=&i;

5.一个指针变量只能指向同类型的变量

6.描述指针要说清楚是指向什么数据类型的指针变量:

int*i=&i;

i是指向整型数据的指针变量

指针变量有关的运算符&  *  *p是值   p是地址

&:取地址运算符

*:指针运算符

例如:

int a=10;

int *i=&a;

cout<<a<<*i;

输出结果相同

***&和*的优先级相同,但是计算时按照自右而左结合

*&a;///先取a的地址然后在*运算,所以*&a==a;等价

指针做函数参数

void awap1(int *p;int *p1){

int a=0;            c++变量要赋予初始值不然会破坏程序

a=*p;

*p=*p1;

*p1=a;

}

注意事项:

1.指针做形参属于地址传递

2.实参要是地址才能被指针承接

3.不要试图改变形参指针变量来改变实参指针变量的值 就是说不能交换地址,改变数据位置

void awap1(int *p;int *p1){

int *a;          

a=p;

p=p1;

p1=a;

}

操作完成后没有任何变化p和p1内的数据没有任何变化

数组和指针

int a[3]={0,1,2};

指向数组元素的指针

int *p=&a[0];

指向数组的指针

int*p=a;

nt*p=&a[0];

二者相同

因为数组时说过数组名就是数组的首地址就是第一个元素位置:

 

指针指向下一个元素:

如果指针已经指向一个元素只要p+1即可指向下一个元素

操作语句

p++;

引用数组元素方法:

1.下标法 a[i]

2.指针法 *(p+i)

注意

指针变量指向数组元素时,用指针访问元素时要尽量避免访问超过长度,虽然合法编译时不会爆i错但是会得不到预期效果

 

指针作为形参承接数组地址

数组名为数组的首元地址,用数组名作为函数的参数,传递的是数组的首元素地址

 

*****c++中编译系统会把形参数组名一律作为指针变量来处理****

 int swap1(int *p,int n)==int swap(int aeet[],int n)

两个函数等效且都是地址传递

因此在函数调用时不会存在形参数组只会有指针变量

字符串和指针

1.字符串和字符数组

char str[]='"hello";

2.字符串变量和字符串

string str='"hello";

3.指针变量和字符串

char*str='"hello";

实际上就是吧字符数组的第一个元素位置给了指针,在访问时,指针会++,直到指向系统添加的'\0'结束访问

函数和指针:

概念:

函数的入口地址就是函数的指针

一般形式:

函数类型 (*变量名)(参数列表)

例如

int max(int a,int b);

int (*p)(int a,int b);//定义指向函数的指针变量p

p=max;

p(a,b);//max(a,b)等效

常指针和指向常量的指针(重点)

int const*p;:常指针,指针的指向不能变

const int*p指向常量的指针变量,不能通过指针p改变指向对象的值

指针运算重点

1.指针-+整数:

也就是指针在一个连续的内存中往后移或往前进

2.指针-指针:可以得到这两个指针之间一共多少元素

前提:空间连续(数组)

常用来求数组内元素的个数 

3.指针变量可以指向为空NULL

指向为空不等于没有指向,如果指针变量没有初始值,他会乱指,相当的危险,所以一般我们会引用指针变量之前先赋值

4.两个指针比较

前提两个指针指向同一个数组,则可以比较,后面元素的指针大于前面元素指针

5.指针赋值

同类型赋值

引用

概念:

引用在c+中就是给变量起一个别名

一般形式:

数据类型 &别名=变量名;

int&b=a;

b就是a的别名

注意事项:

1.引用是独立的数据结构,引用只有声明,没有定义

2.声明一个引用时,必须同时使之初始化,说明指向那个变量

3.声明一个变量之后,不能再让它成为别的变量的别名

4.不能引用数组和指针

5.不能别名的别名

6.可以去引用的地址,别名的地址和原名地址一样

7区别不同的地方取地址还是起别名

int&b=a;

int *p=&a

***引用可以理解为指针但又不同*,至少在引用做参数和指针参数是一致的**可以自行查阅

引用作为函数参数

int main(){

int max1(int*p1,int *p2 );

int max2(int&p1,int &p2 );

int a=10;int b=20;

max1(&a,&b);

max2(a,b);

return 0;}

max1和|max2都是地址传递方式,引用更为方便一些,减少了解引用的操作,更为简单

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值