指针

1.基础知识

1.1 定义

// 定义指针
int a = 10;
// 指针定义的语法->数据类型 *指针变量名
int *p;
//让指针记录变量a的地址
p = &a;

或者直接 int *p = &a;

1.2 使用

// 指针前加 * 代表解引用,找到指针指向的内存中的数据,进行读取,修改数据
*p = 1000;

1.3 指针所占内存空间

不管是什么数据类型,在 32 位操作系统下占用4个字节空间;64位占8个字节
查看指针所占内存空间:

sizeof(p); // 或者 sizeof(int *);

1.4 空指针和野指针

空指针:指针变量指向内存中编号为0的空间。用途是初始化指针变量。注意:空指针指向的内存是不可以访问的

int *p = NULL;

友情提示:0~255之间的内存编号是系统占用的,因此不可以访问

野指针

// 指针变量指向内存地址编号为 0x1100的空间
int *p = (int *)0x1100;
// 访问野指针报错
cout << *p << endl;

2. 指针的综合应用相关介绍

2.1 ★const修饰指针

const修饰指针有三种情况:

  1. const修饰指针 --- 常量指针,特点:指针的指向可以改,但指针指向的值不可以改
int a = 10;
const int *p = &a;
  1. const修饰常量 --- 指针常量,特点:指针的指向不可以改,但指针指向的值可以改
int * const p = &a;
  1. const既修饰指针,又修饰常量,特点:指针的指向和指向的值都不可以改
const int * const p = &a;

2.2 指针和数组

利用指针访问数组中元素。

int arr[10] = {1,2,3};
int *p = arr;
for(int i = 0; i < 10; i++){
  // 以下两行代码或者简写为 *p++
  cout << *p << endl;
  p++;
}

2.3 指针和函数

举个栗子:swap函数:交换两个数

int a = 10;
int b = 20;
swap(&a, &b);
void swap(int *p1, int *p2){
  int temp = *p1;
  *p1 = *p2;
  *p2 = temp;
}

2.4 结构体指针

struct student{
  string name;
  int age;
  int score;
};
// 1.创建学生结构体变量
struct student s = {"张三", 18, 100};
// 2.通过指针指向结构体变量
struct student *p = &s;
// 3.通过指针访问结构体变量中的数据
cout << p -> name << p -> age << p -> score << endl;
posted @ 2022-02-03 20:52  SKIPSPUR_SUPER  阅读(26)  评论(0)    收藏  举报