C++的指针与引用

指针

1、指针定义:

指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。

2、指针的声明与运用:

#include <iostream>
using namespace std;
int main(void)
{
	int x = 20;
	int *p;//声明指针
	p = &x;//指针指向地址,然后修改指针所指向的地址
	*p = 20;//*p 表示取指针的值,并将地址为(&x)的内存单元的内容修改为20
	return 0;
}

3、指针与数组

可以利用指针p++来依次访问存储位置相邻的数组的值

#include <iostream>
using namespace std;
int main(void)
{
	int a[5] = {0,1,2,3,4,5};
	int *p;
	p = &a[0];//将p定位到a[0]的位置
	p++;//将p指向下一个位置,就是a[1]的位置
	return 0;
}

4、当指针作为参数时

对函数的形参的值修改也会将实参的值改变

#include <iostream>
using namespace std;
void Swap(int *a,int *b)
{
	int x = *a;//暂时存储a的值
	*a = *b;//将a指针指向的值改为b指针所指的值
	*b = x;//将b指针指向的值改为a指针未改变之前所指向的值,就是暂存在x中的值
}
int main(void)
{
	int x = 1,y = 2;
	Swap(&x,&y);//这里要传递地址
	printf("x = %d,y = %d\n",x,y);//发现x,y的值发生了变化
	return 0;
}

5、从函数返回指针

Note:C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static变量。

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int *RandRom()
{
    static int tp[10];
    srand( (unsigned)time( NULL ) );
    for(int i=0;i<10;i++){
        tp[i] = rand();
    }
    return tp;
}
int main(void)
{
    int *p;
    p = RandRom();
    for(int i=0;i<10;i++){
        cout<<"i = "<<i<<",*(p+i) = ";
        cout<<*(p+i)<<endl;
    }
    return 0;
}

引用

1、定义

引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。

2、引用和指针的区别

1、不存在空引用,引用必须连接到一块合法的内存
2、一旦一个引用初始化为一个对象,就不能再转为另一个对象。指针随时可以指向另一个对象。
3、引用必须在创建时被初始化,指针可以在任何时候被初始化。

3、引用的创建

引用的值会随着引用对象的值的改变而改变

#include <iostream>
using namespace std;

int main(void)
{
    int n = 3;
    int& x = n;//这里一定要初始化
    n = 7;
    cout<<"n = "<<n<<",x = "<<x<<endl;
    return 0;
}

4、引用作为参数

#include <iostream>
using namespace std;
void Swap(int& x,int &y)//形参的类型是引用
{
    int t = x;
    x = y;
    y = t;
}
int main(void)
{
    int a = 1,b = 2;
    Swap(a,b);
    cout<<"a = "<<a<<endl;
    cout<<"b = "<<b<<endl;

    return 0;
}

5、引用作为返回值

当返回一个引用时,被引用的对象不能超过作用域,所以一个对局部变量的引用是不合法的,但是可以返回一个对静态变量的引用。

#include <iostream>
using namespace std;
int& Mul(int x,int y)
{
    static int ans = x*y;//这里引用的返回值设为static
    return ans;
}
int main(void)
{
    int a = 6,b = 7;
    int c = Mul(a,b);
    cout<<"c = "<<c<<endl;

    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值