首页 > 其他分享 >11、指针和引用

11、指针和引用

时间:2023-03-14 22:13:25浏览次数:38  
标签:11 10 20 int 引用 const 指针

指针:是一个变量,存储一个变量的地址。
引用:是变量的别名。

1、初始化

  1. 指针定义时不必初始化,引用必须初始化。
  2. 指针初始化时可为NULL,引用不能初始化为NULL。
    int a = 10;
    int *p = &a;
    int &y = a;
   cout << "a是" << a << endl;
   cout << "p是" << p << endl;
   cout << "*p是" << *p << endl;
   cout << "y是" << y << endl;
   cout << "&y是" << &y << endl;

2、const修饰

const修饰指针,const放在之前所指变量值不可改变,const放在之后,指针本身不能改变,指向的变量值可以改变。

int a = 10;
int b = 20;
const int *p1 = &a;
*p1 = 20; // 错误
p1 = &p2; // 正确

int a = 10;
int b = 20;
int const* p2 = &b;
*p2 = 30; // 正确
p2 = &a; // 错误

const修饰引用,放在&之前不能修改引用所表示的变量的值,放在&之后,const作用被忽略。

int a = 10;
const int &y = a;
y = 20; // 正确

3、引用从一而终

非常指针在指针赋值后可以改变指针值;引用在初始化后不能再作为别的变量的别名。

int a = 10;
int b = 20;
const int *p = &a;
int &y = a;
y = b;
cout << "a是" << a << endl;
cout << "p是" << p << endl;
cout << "y是" << y << endl;
cout << "&y是" << &y << endl;

// 输出
a是20
p是0xfc947ff794
y是20
&y是0xfc947ff794

y指向的地址没有改变,只是将b的值赋给a。

4、函数传参

int test1(int a, int b)
{
  a = 1;
  b = 1;
  return a + b;
}

int test2(int &a, int &b)
{
  a = 1;
  b = 1;
  return a + b;
}

int test3(int *a, int *b)
{
  *a = 1;
  *b = 1;
  return *a + *b;
}

测试test1

int a = 10;
int b = 20;
int c = test1(a, b);
cout << "a是" << a << endl;
cout << "b是" << b << endl;
cout << "c是" << c << endl;

// 输出
a是10
b是20
c是2

测试test2

int a = 10;
int b = 20;
int c = test2(a, b);
cout << "a是" << a << endl;
cout << "b是" << b << endl;
cout << "c是" << c << endl;

// 输出
a是1
b是1
c是2

测试test3

int a = 10;
int b = 20;
int c = test3(&a, &b);
cout << "a是" << a << endl;
cout << "b是" << b << endl;
cout << "c是" << c << endl;

// 输出
a是1
b是1
c是2

标签:11,10,20,int,引用,const,指针
From: https://www.cnblogs.com/dbai/p/17216608.html

相关文章

  • Java中的基本数据类型和引用数据类型
    一、基本数据类型:byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0short:短整型,在内存中占16位,即2个字节,取值范围-32768~32767,默认值0int:整......
  • c++11多线程入门<学习记录>
    最近学习了c++多线程相关知识,也算是对这方面内容的入门视频链接c++11并发与多线程视频课程看了大概两周,简单进行总结参考文章C++11并发与多线程PS:c++11提供了标准的可......
  • 2816. 判断子序列(双指针模板题)
    https://www.acwing.com/problem/content/2818/双指针模板题:i指针只有匹配到相等才++,j指针无论如何每次都++那么i==n时,意味着b序列中存在着a序列,且有序离散存放#inclu......
  • 【洛谷】P2414 [NOI2011] 阿狸的打字机(AC自动机+离线询问)
    原题链接题意给定\(n\)个字符串,\(m\)次询问一个字符串\(x\)在另一个字符串\(y\)的出现次数。\(1\leqn,m\leq10^5\)。思路要解决多个字符串的问题,不难想到......
  • 11.7 消除闪烁(1)(harib08g)
    ps:看书比较急,有错误的地方欢迎指正,不细致的地方我会持续的修改11.7消除闪烁(1)(harib08g)11.6高速计数器(harib08f)存在闪烁的问题,产生原因:刷新时会从低到高进行刷新,故下层......
  • 以下是一个使用C++实现HTTP文件下载的简单示例,其中使用了C++ 11的标准库和Boost库:
    #include<iostream>#include<fstream>#include<boost/asio.hpp>usingboost::asio::ip::tcp;intmain(){try{boost::asio::io_serviceio_se......
  • 11.8 消除闪烁(2)(harib08h)
    ps:看书比较急,有错误的地方欢迎指正,不细致的地方我会持续的修改11.8消除闪烁(2)(harib08h)11.7消除闪烁(1)(harib08g)存在的问题:鼠标放在计时器上会有闪烁,产生原因:会先绘制计......
  • 「双指针&前缀和&回溯法」weight
    本题为3月14日23上半学期集训每日一题中B题的题解题面题目描述已知原数列\(a_1,a_2,\cdots,a_n\)中的前1项,前2项,前3项,...,前n项的和,以及后1项,后2项,后3项,...,后n项......
  • P1196 [NOI2002] 银河英雄传说
    有一个30000*N(i)的列队,2种操作1.Mi,j   i行移动到j行的末尾2.Ci,j  询问i行和j行的距离(如果在同一列) #include<bits/stdc++.h>usingnamespacestd;......
  • 800. 数组元素的目标和(双指针,二分)
    https://www.acwing.com/problem/content/802/二分:枚举a,对于每一个a[i],都二分一下求x-a[i],是否在b数组中#include<iostream>usingnamespacestd;constintN=1......