【C/C++ 学习笔记】指针

【C/C++ 学习笔记】指针

视频地址: Bilibili

概念

  • 可以通过指针间接访问内存
  • 用于保存地址

使用

通过 & 可以获取数据的指针

通过 * 可以取得指针的数据

指针的数据类型就是 数据类型 *

c++ 复制代码
int number = 10;

int *p = &number;

// 10
cout << "number: " << number << endl;
// 000000149F0FF960
cout << "p: " << p << endl;
// 10
cout << "p's number : " << *p << endl;

内存

32 位占 4 个字节,64 位占 8 个字节

空指针

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

  • 用于初始化指针变量
  • 空指针的内存数据无法访问
c++ 复制代码
int *p = NULL;
// ERROR!
// &p = 100;

野指针

指针变量指向非法的内存空间,无法确定是否能够使用

c++ 复制代码
// ERROR
int *p = (int *)0x1100;

const 修饰指针

  • const 修饰指针 -> 常量指针

    • 指针的指向可以修改,但是指针指向的值不能修改

      c++ 复制代码
      // const 修饰指针
      int a1 = 10;
      int b1 = 10;
      const int *p1 = &a1;
      
      // ERROR
      // *p1 = 20;
      // PASS
      p1 = &b1;
  • const 修饰常量 -> 指针常量

    • 指针的指向不可以修改,但是指针指向的值可以修改

      c++ 复制代码
      // const 指针常量
      int a2 = 10;
      int b2 = 10;
      int *const p2 = &a2;
      
      // PASS
      *p2 = 20;
      // ERROR
      // p2 = &b2;
  • const 修饰指针&常量

    • 指针的指向不可以修改,并且指针指向的值也不可以修改

      c++ 复制代码
      const int *const p3 = &a3;

指针和数组

数组名就是指向数组的首地址

c++ 复制代码
int arr[] = {1, 2, 3, 4, 5};
int *p3 = arr;

cout << "p3: " << *p3 << "   arr[0]: " << arr[0] << endl;
// p + 1 导致指针向后移动 4 个字节
cout << "p3: " << *(p3 + 1) << "   arr[0]: " << arr[1] << endl;

指针和函数

通过指针传参可以修改原数据

c++ 复制代码
int add1(int a, int b) {
    a++;
    b++;
    return a + b;
}

int add2(int *a, int *b) {
    *a = *a + 1;
    *b = *b + 1;
    return *a + *b;
}
c++ 复制代码
int a = 10;
int b = 20;

// 不修改原值
cout << "add1: " << add1(a, b) << endl;
// 10 20
cout << "a: " << a << "  b: " << b << endl;

// 修改原值
// 32
cout << "add2: " << add2(&a, &b) << endl;
// 11 21
cout << "a: " << a << "  b: " << b << endl;

冒泡排序:

c++ 复制代码
void bubble(int *arr, int len) {
    for (int i = 0; i < len; i++) {
        for (int j = 0; j < len - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                *(arr + j) = arr[j + 1];
                *(arr + j + 1) = temp;
            }
        }
    }

}
相关推荐
左左右右左右摇晃6 分钟前
计算机网络笔记整理
笔记·计算机网络
不吃西红柿的8510 分钟前
[职场] 内容运营求职简历范文 #笔记#职场发展
笔记·职场和发展·内容运营
旖-旎32 分钟前
二分查找(x的平方根)(4)
c++·算法·二分查找·力扣·双指针
似水明俊德1 小时前
02-C#.Net-反射-学习笔记
开发语言·笔记·学习·c#·.net
顶点多余1 小时前
使用C/C++语言链接Mysql详解
数据库·c++·mysql
汉克老师1 小时前
GESP2026年3月认证C++四级( 第二部分判断题(1-10))
c++·指针·函数重载·文件操作·数组·gesp4级·gesp四级
智者知已应修善业1 小时前
【51单片机独立按键控制数码管移动反向,2片74CH573/74CH273段和位,按键按下保持原状态】2023-3-25
经验分享·笔记·单片机·嵌入式硬件·算法·51单片机
adore.9682 小时前
3.18 复试学习
学习
khddvbe2 小时前
C++并发编程中的死锁避免
开发语言·c++·算法
C羊驼2 小时前
C语言:两天打鱼,三天晒网
c语言·经验分享·笔记·算法·青少年编程