当前位置: 首页 > news >正文

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

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

视频地址: Bilibili

概念

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

使用

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

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

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 的空间

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

野指针

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

// ERROR
int *p = (int *)0x1100;

const 修饰指针

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

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

      // const 修饰指针
      int a1 = 10;
      int b1 = 10;
      const int *p1 = &a1;// ERROR
      // *p1 = 20;
      // PASS
      p1 = &b1;
      
  • const 修饰常量 -> 指针常量

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

      // const 指针常量
      int a2 = 10;
      int b2 = 10;
      int *const p2 = &a2;// PASS
      *p2 = 20;
      // ERROR
      // p2 = &b2;
      
  • const 修饰指针&常量

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

      const int *const p3 = &a3;
      

指针和数组

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

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;

指针和函数

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

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;
}
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;

冒泡排序:

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;}}}}
http://www.lryc.cn/news/318035.html

相关文章:

  • 【Node.js从基础到高级运用】十二、身份验证与授权:JWT
  • 蓝桥杯刷题|01入门真题
  • Python Django相关解答
  • 在Linux/Ubuntu/Debian中使用7z压缩和解压文件
  • 设计一些策略和技术来防止恶意爬虫
  • elasticsearch常见问题:xpack.security.transport.ssl、unknown setting [node.master]
  • LLM(大语言模型)——Springboot集成文心一言、讯飞星火、通义千问、智谱清言
  • 什么是堆?什么是栈?
  • 【镜像转存】利用交互式学习平台killercoda转存K8S镜像至Docker私人仓库
  • ov多域名SSL数字证书1200元一年送一月
  • MySQL 系统变量查看与设置(System Variables Configuration)
  • 【Docker】apache 容器化部署
  • 基于element-plus +腾讯云COS实现图片上传
  • Kafka模拟器产生数据仿真-集成StructuredStreaming做到”毫秒“级实时响应StreamData落地到mysql
  • IDEA如何删除git最新一次远程提交
  • 什么是单向数据流
  • Qt 线程池 QThreadPool
  • 【兔子机器人】实现从初始状态到站立
  • ImportError: cannot import name ‘open_filename‘ from ‘pdfminer.utils‘已搞定
  • 一文解决Word中公式插入问题(全免费/latex公式输入/texsWord)
  • C语言实战——扫雷游戏
  • .Net使用ElasticSearch
  • HTML5、CSS3面试题(二)
  • sqllab第十一关通关笔记
  • 机械女生,双非本985硕,目前学了C 基础知识,转嵌入式还是java更好?
  • Python之字符串操作大全(29种方法)
  • ArcGIS学习(十五)用地适宜性评价
  • 【matlab】如何将.mat文件与.nii文件互转
  • Uni-app开发Canvas当子组件示例,点点绘制图形
  • 从金蝶云星空到钉钉通过接口配置打通数据