指针,引用?这一篇就够了!!!

本文详细介绍了C++中的指针和引用概念,包括指针的定义、使用,如变量与指针、数组与指针、字符串与指针、函数与指针,以及引用的声明和使用,如变量的引用和引用作为函数参数。通过实例解析了如何通过指针和引用进行内存操作,强调了指针的安全使用和引用作为高效传递方式的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

善于使用指针和引用

指针

1.1 什么是指针

首先,在弄清楚什么是指针之前,务必要知道时数据在内存中是如何存储的

  • 如果在程序中定义了一个变量,在编译时就给这个变量分配内存单元。系统根据定义的变量类型,分配一定长度的空间。例如:c++编译系统一般为整型变量分配4个字节。内存区的每个字节有一个编号,这就是地址
  • 程序经过编译以后已经将变量名转换为变量的地址,对变量值得存取都是通过地址进行的。例如:语句"cout<< i;"的执行是这样的:根据变量名与地址的对应关系,找到变量i的地址2000,然后从由2000开始的4个字节中取出数据(即变量的值3),把它输出。这种按变量地址存取变量值的方式称为直接存取方式,或直接访问方式。
  • 还可以定义这样一个特殊的变量,专门用它来存放地址。这样把变量i的地址存放在变量中,这个变量称为指针变量一个变量的地址称为该变量的指针

1.2 变量与指针

变量的指针就是变量的地址,用来存放变量地址的变量就是指针变量。 如果i_pointer是一个指针变量,而*i_pointer表示i_pointer所指向的变量

1.2.1定义指针变量

int i,j;
int *pointer_1,*pointer_2;

第二行所定义的指针变量是指向整型数据的指针变量(pointer_1和pointer_2只能存放整型数据的地址。int为指针变量的基类型

  • 所以定义指针变量的一般形式为:
    基类型 * 指针变量名
  • 那么怎样使一个指针变量指向另一个变量?只需要把被指向的变量的地址赋值给指针变量即可。例如:pointer_1=&i;
    &是取地址运算符, &i是变量i的地址,执行该语句后pointer_1的值就是变量i所占存储单元的起始地址

1.2.2引用指针变量

首先,有两个与指针变量有关的运算符:
(1)&:取地址运算符
(2)*:指针运算符(间接访问运算符)

&*pointer_1和 *&a的含义?(假设已经执行了"pointer_1=&a;")答案:前者为a的地址,后者为a本身。

#include<iostream>
using namespace std;
int main()
{
   int *p1,*p2,*p,a,b;
   cin>>a>>b;
   p1 = &a;
   p2 = &b;
   if(a < b){
     p = p1;
     p1 = p2;
     p2 = p;
   }
   cout<<"a ="<<a<<"b = "<<b<<endl;
   cout<<"max = "<<*p1<<"min = "<<p2<<endl;
   return 0;
}

运行结果:a = 45 b = 48
max = 78 min = 45

这个问题的算法是不交换整型变量的值,而是交换两个指针变量的值。

如下图所示:在这里插入图片描述在这里插入图片描述

1.2.3 用指针做函数参数

如果一个函数的参数是指针类型,它的作用是将一个变量的地址传送给被调用函数的形参。

  • 例子同上例
//交换a和b的值
#include <iostream>
using namespace std;
int main()
{
  void swap(int *p1,int *p2);  //函数声明
  int *pointer_1, *pointer_2,a,b;
  cin>>a>>b;
  pointer_1 = &a;
  pointer_2 = &b;
  if(a < b)swap(pointer_1,pointer_2);//如果a<b,使*pointer_1和*pointer_2互换
  cout<<"max = "<<a<<"min = "<<b&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值