首页 > 编程语言 >C++黑马程序员——P56-62. 指针

C++黑马程序员——P56-62. 指针

时间:2023-03-28 17:11:45浏览次数:35  
标签:const 指向 int C++ 62 修饰 P56 指针

  • P56. 指针——指针的定义和使用
  • P57. 指针——指针所占内存空间
  • P58. 指针——空指针
  • P59. 指针——野指针
  • P60. 指针——const修饰指针
  • P61. 指针——指针和数组
  • P62. 指针——指针和函数
  • P56. 指针的定义和使用

指针的作用:可以通过指针间接访问内存

  

指针定义语法:

数据类型 * 指针变量名;

 1 int main()
 2 {
 3     int a = 10;
 4     //定义指针
 5     int* p;
 6     //让指针记录变量a的地址
 7     p = &a;
 8     cout << "a的地址为:" << &a << endl;
 9     cout << "p为:" << p << endl;
10     //使用指针
11     //可以通过解引用的方式来找到指针指向的内存
12     //指针前加 * 代表解引用,找到指针指向的内存中的数据
13     *p = 1000;
14     cout << "a = " << a << endl;
15     cout << "*p = " << *p << endl;
16     return 0;
17 }

运行结果:

  

 

  •  P57. 指针所占内存空间
  • int a = 10;

  int * p;

  p = &a;

等价于

  int * p = &a;

  • 在32位操作系统下,任何类型的指针都占4个字节大小;在64位操作系统下,指针占8个字节大小。

 

  • P58. 空指针

空指针:指针变量指向内存中编号为0的空间

用途:初始化指针变量(指针一开始不知道指向哪好,那就指向这)

注意:空指针指向的内存是不可以访问的

int * p = NULL;

 

  • P59. 野指针

野指针:指针变量指向非法的内存空间

总结:空指针和野指针都不是我们申请的空间,因此不要访问。

 

  • P60. const修饰指针
  • const修饰指针有三种情况:

1. const修饰指针——常量指针

const int * p = &a;

特点:指针的指向可以修改,但是指针指向的值不可以改。

* p = 20;    //错误
p = &b;    //正确

 

2. const修饰常量——指针常量

int * const p = &a;

特点:指针的指向不可以改,指针指向的值可以改。

* p = 20;    //正确
p = &b;    //错误

 

3. const既修饰指针,又修饰常量

const int * const p = &a;

特点:指针的指向和指针指向的值都不可以改。

* p = 20;    //错误
p = &b;    //错误

 

  • P61. 指针和数组
 1     int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
 2     int* p = arr;    //arr就是数组的首地址
 3     cout << "*p = " << *p << endl;    //数组第 1 个元素的值
 4     cout << "p = " << (int)p << endl;
 5     p++;
 6     //弹幕:在C++中,当给一个指针添加一个值的时候,实际上添加的值是把这个值乘以指针引用的数据类型的大小。
 7     cout << "p = " << (int)p << endl;    //运行之后可以看到"p++"实际p+4
 8     cout << "*p = " << *p << endl;    //数组第 2 个元素的值
 9     p = p + 2;
10     cout << "p = " << (int)p << endl;
11     cout << "*p = " << *p << endl;    //数组第 4 个元素的值

运行结果:

  

 

  • P62. 指针和函数

作用:利用指针作函数参数,可以修改实参的值

 1 //值传递
 2 void swap01(int a, int b)
 3 {
 4     int temp = a;
 5     a = b; 
 6     b = temp;
 7     cout << "swap01 a = " << a << endl;
 8     cout << "swap01 b = " << b << endl;
 9 }
10 //地址传递
11 void swap02(int* p1, int* p2)
12 {
13     int temp = *p1;
14     *p1 = *p2;
15     *p2 = temp;
16     cout << "swap02 *p1 = " << *p1 << endl;
17     cout << "swap02 *p2 = " << *p2 << endl;
18 }
19 
20 int main()
21 {
22     int a = 10;
23     int b = 20;
24     //值传递不会改变实参
25     swap01(a, b);
26     cout << "a = " << a << endl;
27     cout << "b = " << b << endl;
28     //地址传递会改变实参
29     swap02(&a, &b);
30     cout << "a = " << a << endl;
31     cout << "b = " << b << endl;
32     return 0;
33 }

运行结果:

  

(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)

标签:const,指向,int,C++,62,修饰,P56,指针
From: https://www.cnblogs.com/wjjgame/p/17249776.html

相关文章

  • C++核心编程笔记
    C++核心编程本内容主要针对C++面向对象编程技术做详细讲解1内存分区模型C++程序在执行时,将内存大方向划分为4个区域:代码区:存放函数体的二进制代码,由操作系统进行管理......
  • C++基础入门笔记
    C++基础入门1数据类型C++规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存1.1整型作用:整型变量表示的是整数类型的数据C++中整数类......
  • c++14 读写锁
    读的时候用共享锁,写的时候用独占锁structotherSettingModel{inlinestaticconstchar*jsonFileSavePath="../data/otherSettingModel.json";inlinesta......
  • C++智能指针、绑定器和函数对象、lambda表达式
    智能指针​ 智能指针可以保证资源的自动释放不带引用计数的智能指针auto_ptr只让最后一个指向的指针管理资源,之前的auto_ptr会被置为nullptrscoped_ptr删除了拷贝构造......
  • C++开发方向书籍推荐
    如果你正在学习C++,那么一本好的教材或参考书可以事半功倍。以下是几本我个人推荐的C++书籍或视频:C++基础看书C++PrimerC++程序设计语言EffectiveC++MoreEffectiv......
  • IMU和GPS ekf融合定位 从matlab到c++代码实现 基于位姿状态方程,松耦合
    IMU和GPS ekf融合定位从matlab到c++代码实现基于位姿状态方程,松耦合文档原创且详细YID:6745659043907933......
  • C++11之智能指针shared_ptr
    在C++开发中,我们经常会遇到程序运行中突然崩溃、程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的。C++11新标准中,增添了uni......
  • C++ primer第十五章总结
    1oop的思想是数据抽象继承和动态绑定数据抽象可以将类的接口与实现分离;继承动态绑定,又称运行时绑定2虚函数是基类希望其派生类进行覆盖的函数<1>任何构造函......
  • C++学习路线
    C++是一种高级编程语言,广泛用于开发操作系统、应用程序、游戏和各种工具。如果你想学习这门语言,以下是一个适合初学者的学习路线:第一步:学习C++基础知识在学习C++之前,你需......
  • 【2023.03.27】乐乐兄弟中华街系列8962短评
    前言本人是自费购买积木,购买原因是给妹妹培养动手能力,减少短视频占用时间,其次是给家里做摆饰,所以选择积木多考虑了美观非专业评测,如果想看更多积木评测请点进我的博客主......