• C++ 指针基础


     

    目录

    1.定义指针

    2.使用指针

    3.查看指针所占内存

    4.空指针

    5.野指针

    6.const修饰指针

    7.指针和数组

    8.指针和函数


    1.定义指针

    1. #include
    2. using namespace std;
    3. #include "swap.h"
    4. int main()
    5. {
    6. //1.定义指针
    7. int a = 10;
    8. //指针定义的语法
    9. int * p;
    10. //让指针记录变量a的地址
    11. p = &a;
    12. cout << "a的地址为:" << &a << endl;
    13. cout << "指针p为:" << p << endl;
    14. }

    结果:

    2.使用指针

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

     结果:

     表示通过指针修改了存储变量a的内存

    3.查看指针所占内

    1. #include
    2. using namespace std;
    3. #include "swap.h"
    4. int main()
    5. {
    6. //指针所占内存空间
    7. int a = 10;
    8. int * p = &a;
    9. cout << sizeof(p) << endl;
    10. }

    结果:

            4(32位操作系统)

            8(64位操作系统)

    4.空指针

    含义指针变量指向内存中编号为0的指针称为空指针。

    作用:初始化指针变量

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

    1. #include
    2. using namespace std;
    3. #include "swap.h"
    4. int main()
    5. {
    6. //空指针
    7. //1.空指针用于给指针变量进行初始化
    8. int * p = NULL;
    9. //2.空指针是不可以进行访问的
    10. //0~255之间的内存编号是系统占用的,因此不可以访问
    11. //*p = 100;
    12. }

    5.野指针

    指针变量指向非法的内存空间的指针称为野指针,在程序中应避免出现野指针。

    1. #include
    2. using namespace std;
    3. #include "swap.h"
    4. int main()
    5. {
    6. //野指针
    7. int * p = (int *)0x1100;
    8. cout << *p << endl;
    9. }

    结果:

     空指针和野指针都不是我们申请的空间,不要访问。

    6.const修饰指针

    const修饰指针有三种情况:

            1.const修饰指针称为常量指针 

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

               例:

                       int a = 10;

                       const int * p = &a;

                       *p = 20;   (×)

                       p = &b;   (√)

            2.const修饰常量称为指针常量   

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

               例:

                       int a = 10;

                       int * const p = &a;

                       *p = 20;   (√)

                        p = &b;   (×)

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

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

               例:

                        int a = 10;

                        const int * const p = &a;

                        *p = 20;   (×)

                        p = &b;    (×)

    7.指针和数组

    7.1 利用指针访问数组元素:

    1. #include
    2. using namespace std;
    3. #include "swap.h"
    4. int main()
    5. {
    6. //利用指针访问数组中的元素
    7. int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    8. int * p = arr; //创建一个整型的指针指向数组,arr就只数组的首地址
    9. cout << "数组中的第一个元素:" << *p << endl;
    10. p++; //让指针向后偏移4个字节
    11. cout << "数组中的第二个元素:" << *p << endl;
    12. }

    结果:

    7.2 利用指针遍历数组:

    1. #include
    2. using namespace std;
    3. #include "swap.h"
    4. int main()
    5. {
    6. //利用指针遍历数组
    7. int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    8. int * p2 = arr;
    9. for (int i = 0; i < 10; i++) {
    10. cout << *p2 << endl;
    11. p2++;
    12. }
    13. }

     结果:

    8.指针和函数

    1. #include
    2. using namespace std;
    3. #include "swap.h"
    4. void swap(int *p1, int *p2) {
    5. int temp = *p1;
    6. *p1 = *p2;
    7. *p2 = temp;
    8. }
    9. int main()
    10. {
    11. int a = 10;
    12. int b = 20;
    13. //地址传递:可以修饰实参
    14. swap(&a, &b);
    15. //查看a和b有没有被交换
    16. cout << "a=" << a << endl;
    17. cout << "b=" << b << endl;
    18. }

     结果:

     

  • 相关阅读:
    分布式运用之企业级日志ELFK+logstash的过滤模块
    使用契约的链上限价订单
    进入数字化供应链高潮期,与IBM咨询共创无边界竞争力
    vr航天探索科普展vr航天科普亲子嘉年华
    Cleanmymac X绿色中文苹果系统清理软件
    武汉新时标文化传媒有限公司内容策划需要遵守这几个原则!
    英语——分享篇——每日200词——2201-2400
    Python网络爬虫与信息提取 第1周网络爬虫之规则 单元1:Requests库入门
    LLVM之父Chris Lattner:模块化设计决定AI前途,不服来辩
    R | R包安装报错-github连接速度慢或无法访问 | metaboanalystR | Retip | rJava安装
  • 原文地址:https://blog.csdn.net/ChaoChao66666/article/details/126586192