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

5、指针

5.1 指针的基本概念

指针的作用:可以通过指针直接访问内存,指针内保存着地址

  • 内存编号从0开始,一般用十六进制数表示
  • 可以利用指针变量保存内存地址

5.2 指针的定义和使用

5.2.1 指针的定义

int a=10;
int *p;
p=&a;

在这里插入图片描述

5.2.2 指针的使用

可以通过某种方式来找到指针指向的内存,并对这块内存进行操作。其中,解引用和直接引用是两种常见的方式,当数据为基本数据类型的时候,使用解引用;当数据是数组之类的数据时直接引用,如下代码所示。

#include<iostream>
using namespace std;int main() {int arr[] = {1,2,3};int * p= arr;cout << *p << endl;int a = 9;// int * p;p = &a;cout << *p << endl;system("pause");
/*输出:19
*/
}

5.2.3 空指针和野指针

  • 空指针:
    • 空指针用于给指针变量进行初始化(int * p=Null)
    • 空指针是不可以尽心访问的
  • 野指针
    • 直接给指针赋值,int * p=(int *) 0x1111; 由于内存0x1111并没有真的被申请,访问会报错;

空指针和野指针都不应该在程序中出现,要尽量避免

5.2.4 const 修饰指针

  • const int * p=&a; 常量指针 指针的指向可以修改,但是指针指向的值不可以修改
 const int * p=&a;*p=100;//会报错,指向的值不可以修改p=&b;// 正常运行,指针的指向可以修改
  • int * const p=&a; 指针常量 指针指向不可以改,但是指针指向的值都可以修改
  int * const p=&a;*p=100;// 可以修改p=&b;// 报错
  • const int * const p=&a; 指针指向和指针的值都不可以修改

5.2.5 指针和数组

指针的作用是更快速的访问数据,例如数组

  • 指针加一是向后移动单位个字节(移动字节的数目和指针的类型所占的字节相同,例如 int型的指针p++ 移动四个字节 long long 型指针p++ 移动八个字节)
#include<iostream>
using namespace std;int main() {long long arr[] = {1,2,3};long long * p= arr;cout << *p << endl;p++; // 指针加一是向后移动单位个字节(移动字节的数目和指针的类型所占的字节相同)cout << *p << endl;system("pause");}

5.2.5 指针和函数

在函数内直接修改变量的值,可以使用指针

#include<iostream>
// #include"myfunc.h"
using namespace std;
int swap(int * p1, int *p2);int main() {int num1=1;int num2 = 2;int* p1 = &num1;int* p2 = &num1;swap(*p1, *p2);cout << num1 << endl;cout << num2 << endl;swap(&num1, &num2);cout << num1 << endl;cout << num2 << endl;system("pause");}int swap(int * p1, int * p2) {int tmp=*p1;*p1 = *p2;*p2 = tmp;return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Wireshark_UDP_v7.0
  • OpenCV几何图像变换(6)计算反转仿射变换函数invertAffineTransform()的使用
  • Springboot里集成Mybatis-plus、ClickHouse
  • PsConvertToGuiThread函数调用前传
  • 架构设计(4)面向服务架构SOA与C++模拟实现
  • [数据集][目标检测]建筑工地楼层空洞检测数据集VOC+YOLO格式2588张1类别
  • springboot密码加密步骤
  • 并发编程之----线程池ThreadPoolExecutor,Excutors的使用及其工作原理
  • Scrapy 分布式爬虫框架 Scrapy-Redis
  • 手撕顺序表
  • 无需多部备用机,云手机方便又便宜!
  • gptk是什么意思?Mac电脑如何在crossover里安装gptk2.0测试版?借助GPTK玩《原神》《黑神话悟空》游戏
  • 【算法】深入浅出聚类算法:原理、应用与Java实现
  • Spring Boot实战:通过Spring Cloud Sentinel实现流量控制
  • 代码随想录 刷题记录-17 贪心算法(2)习题
  • 分享一款快速APP功能测试工具
  • [ JavaScript ] 数据结构与算法 —— 链表
  • [译]如何构建服务器端web组件,为何要构建?
  • 【mysql】环境安装、服务启动、密码设置
  • css属性的继承、初识值、计算值、当前值、应用值
  • extract-text-webpack-plugin用法
  • happypack两次报错的问题
  • Java比较器对数组,集合排序
  • Joomla 2.x, 3.x useful code cheatsheet
  • mysql_config not found
  • nginx 配置多 域名 + 多 https
  • PHP面试之三:MySQL数据库
  • python 装饰器(一)
  • Redux 中间件分析
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • 分布式任务队列Celery
  • 浮现式设计
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 怎么将电脑中的声音录制成WAV格式
  • 主流的CSS水平和垂直居中技术大全
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 大数据全解:定义、价值及挑战
  • ​io --- 处理流的核心工具​
  • ​你们这样子,耽误我的工作进度怎么办?
  • #Linux(权限管理)
  • $ git push -u origin master 推送到远程库出错
  • (~_~)
  • (C语言)fgets与fputs函数详解
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Qt) 默认QtWidget应用包含什么?
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (二)c52学习之旅-简单了解单片机
  • (附源码)计算机毕业设计ssm电影分享网站
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (三分钟)速览传统边缘检测算子
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]