c++指针和引用

指针:

指针是一个变量,存储的是一个地址,指向内存的一个存储单元;

引用:

引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用(reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名;

建议:多用引用,少用指针

0.定义指针和引用
int *a=&b;//定义一个指向int类型的指针变量a,*是定义标志,&b表示取int类型变量b的地址,a指针指向b的地址
cout<<*a;//输出指针a指向地址的内容,这里的*是解引用,把指针a指向地址的内容取出来
int&a=b;//给b取一个别名a,对a的操作将直接对b产生修改,这里的&是定义引用类型的标志
//定义变量时*在类型后是定义指针的标志,如果单独出现在变量前或者出现在等号右面是解指针标记,表示获取指针指向地址内容
//定义变量时&在类型后是定义引用的标志,如果单独出现在变量前或者出现在等号右面是取地址标志,表示获取该变量的地址。
1.以下是c++primer里讲的比较好的部分
int i=42;
int &r=i;//随类型名出现,是声明的一部分,r是一个引用,引用必须初始化 ,而且必须是对象 
int *p;//随类型名出现,是声明的一部分,p是一个指针 
p=&i;//&出现在表达式里,是一个取地址符号 
*p=i;//*出现在表达式里,是一个解引用符号 
int &r2=*p;//&是声明的一部分,r2是一个引用,*是一个解引用符号 
2.函数指针参数

Int b;
&b是个指针是b的地址
*a=b 表示 a指针所指向的数据,等于b
*a=&b 表示 a指针所指向的数据,等于b的地址
当一个函数定义为

int func(int *d,int num){
        *d=num;//指针指向num
}

调用的时候可以

Int a;
func(&a,5)就可以把5赋值给a

当一个函数定义为

Int func(int *num,int l)//这里的num需要一个数组

调用的时候就可以

Int num[5]={0,1,2,3,4};
func(num,5)或者func(&num,5)
3.数组元素地址
int a[5];
a、&a、&a[0]都是数组第一个元素的地址
*&a等于&a
int *b;  定义一个指针类型
int a[5]={0,1,2,3,4};
b=&a[3]; 把a[3]的地址赋给b
cout<<b;就是输出这个地址
cout<<*b;就是输出这个地址的数值 
4.数组指针和指针数组
.int (*arr)[3]//为数组指针,指向一个元素个数为3的int类型数组
 int *arr[3]//为指针数组,只想一个元素个数为3的数组,内容是3个int类型指针
//二维数组的指针是行指针,指向第0行的首地址,虽然它的地址和第0个元素的一样,但本质是不同的
int a[][4] = {{1, 2, 8, 9}, 
             {2, 4, 9, 12}, 
             {4, 7, 10, 13}, 
             {6, 8, 11, 15}};
cout<<" "<<endl;
cout<<a<<endl;//a的第0行地址 
cout<<a+1<<endl;//a的第1行地址 
cout<<a+2<<endl;//a的第2行地址 
cout<<a+3<<endl;//a的第3行地址
cout<<a+4<<endl;//
cout<<" "<<endl;
cout<<*a<<endl;//a的第0个元素地址 
cout<<*a+1<<endl;//a的第1个元素地址 
cout<<*a+2<<endl;//a的第2个元素地址 
cout<<*a+3<<endl;//a的第3个元素地址 
cout<<*a+4<<endl;//a的第4个元素地址,等于第1行地址 
cout<<" "<<endl;
cout<<*a<<endl;//a的第0行地址 
cout<<*(a+1)<<endl;//a的第1行地址 
cout<<*(a+2)<<endl;//a的第2行地址 
cout<<*(a+3)<<endl;//a的第3行地址
cout<<*(a+4)<<endl;
cout<<" "<<endl;
cout<<*(a+1)+2<<endl;//a的第1行第2个元素地址 
cout<<*(*(a+1)+2)<<endl;//a的第1行第2个元素内容

 如果一个函数是bool Find(int *matrix,int row,int col,int num)需要传入二维数组
则int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
bool res=Find(*matrix,4,4,8);//用*matrix表示第0个元素地址
5.

char *str3=”haha”;
对于char数组,str是内容,&str是指针的地址,(int*)是内容的地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值