C++基础之指针

文章目录

    • 指针介绍
  • C++指针的定义与用法
    • 指针的定义
    • 指针的基本操作
    • 指针的常见用法
      • 1. 动态内存分配
      • 2. 指针与数组
      • 3. 指针作为函数参数(传址调用)
      • 4. 函数返回指针
    • 特殊指针类型
    • 智能指针(C++11起)
    • 2.入门代码
    • 3.总结

指针介绍

C++指针的定义与用法

指针是C++中一个非常重要的概念,它直接操作内存地址,提供了灵活的内存管理方式。以下是关于C++指针的详细介绍:

指针的定义

指针是一个变量,其值为另一个变量的内存地址。指针的定义语法如下:

数据类型 *指针变量名;

例如:

int *p;     // 定义一个指向整型的指针
double *dp; // 定义一个指向双精度浮点型的指针
char *cp;   // 定义一个指向字符型的指针

指针的基本操作

  1. 取地址运算符(&):获取变量的内存地址
  2. 解引用运算符(*):访问指针所指向的内存位置的值
int var = 20;   // 实际变量的声明
int *ip;        // 指针变量的声明ip = &var;      // 在指针变量中存储var的地址cout << "变量var的值: " << var << endl;
cout << "变量var的地址: " << &var << endl;
cout << "指针ip存储的地址: " << ip << endl;
cout << "指针ip指向的值: " << *ip << endl;

指针的常见用法

1. 动态内存分配

int *ptr = new int;    // 动态分配一个整型内存
*ptr = 10;             // 在分配的内存中存储值
delete ptr;            // 释放内存// 动态分配数组
int *arr = new int[10]; // 分配10个整型的内存块
delete[] arr;           // 释放数组内存

2. 指针与数组

int arr[5] = {1, 2, 3, 4, 5};
int *p = arr; // 数组名就是数组首元素的地址for(int i = 0; i < 5; i++) {cout << *(p + i) << " "; // 通过指针访问数组元素
}

3. 指针作为函数参数(传址调用)

void swap(int *x, int *y) {int temp = *x;*x = *y;*y = temp;
}int main() {int a = 5, b = 10;swap(&a, &b); // 传递变量的地址cout << a << " " << b; // 输出 10 5return 0;
}

4. 函数返回指针

int* createArray(int size) {int *arr = new int[size];for(int i = 0; i < size; i++) {arr[i] = i + 1;}return arr;
}int main() {int *myArray = createArray(5);// 使用数组...delete[] myArray; // 记得释放内存return 0;
}

特殊指针类型

  1. 空指针(nullptr):表示指针不指向任何对象

    int *ptr = nullptr;
    
  2. void指针:可以指向任意类型的数据

    void *vp;
    int a = 10;
    vp = &a;
    
  3. 指向指针的指针

    int var = 10;
    int *ptr = &var;
    int **pptr = &ptr;
    

智能指针(C++11起)

为了更安全地管理动态内存,C++11引入了智能指针:

#include <memory>// 独占指针
std::unique_ptr<int> uptr(new int(10));// 共享指针
std::shared_ptr<int> sptr1 = std::make_shared<int>(20);
std::shared_ptr<int> sptr2 = sptr1; // 共享所有权// 弱指针
std::weak_ptr<int> wptr = sptr1;

指针是C++强大但也容易出错的特性,使用时需要注意内存管理,避免内存泄漏和悬空指针等问题。

2.入门代码

#include<stdio.h>
//交换两个值 p就是地址?
void swap(int* p,int* q)
{int t = *p;*p = *q;*q = t;printf("\n");printf("指针内容交换完毕~");}
int main()
{int a = 6;int b = 4;int* p = &a;int* q = &b;printf("%d %d",p,q);printf("\n\r");printf("%d %d",*p,*q);
//	交换指针内容swap(p,q);printf("\n");printf("%d %d",p,q);printf("\n");printf("%d %d",*p,*q);} 

C++版本 交换变量地址以及内容前后对比

#include<stdio.h>
#include<iostream>
using namespace std;
//交换两个值 p就是地址?
void swap(int* p,int* q)
{int t = *p;*p = *q;*q = t;printf("\n");printf("指针内容交换完毕~");
}
//交换指针指向
void swap_address(int **p,int **q)
{
//  int t = *p;
//  *p = *q;
//  *q = t;
//  //交换指针地址int* k = *p;*p = *q;*q = k;cout << "指针地址交换完毕" << endl;printf("\n");
//  printf("指针内容交换完毕~");
//  
}
int main()
{int a = 6;int b = 4;int* p = &a;int* q = &b;printf("%d %d",p,q);printf("\n\r");printf("%d,%d",a,b);printf("\n\r");//传入指针内容,用于交换地址printf("%d %d",*p,*q);
//	交换指针内容printf("\n\r");printf("%d,%d",a,b);swap(p,q);printf("\n\r");printf("%d %d",*p,*q);printf("\n\r");swap_address(&p,&q);printf("\n");printf("%d %d",p,q);printf("\n");printf("%d %d",*p,*q);} 

3.总结

指针式核心内容,怎么表示地址,怎么表示指针指向的内容,怎么操作指针,如何正确打印指针,还是指针的内容,二级三级等多级指针如何操作?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/88090.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于存储过程的MySQL自动化DDL同步系统设计

在现代SaaS与微服务架构中&#xff0c;数据库结构的自动化管理成为保障系统迭代效率与数据一致性的关键一环。本文将围绕如何通过 MySQL 存储过程构建一个自动建表、字段同步、索引维护、错误日志记录于一体的 DDL 自动同步系统&#xff0c;提供一套完整的工程化实现方案。 一…

【cmake学习】添加库文件

文章目录 目的一、原理二、步骤1.修改CMakeList2.main函数如下3.编译运行 目的 上一篇 学习了使用cmake 构建多源文件工程在项目开发工程中&#xff0c;一般都会生成库文件或者调用其它的一些库文件&#xff0c;所以我们要学习一下简单生成和使用库文件这里主要介绍 add_libra…

Docker容器化部署实战:Spring Boot + MySQL + Nginx 一键部署完整指南

📖 前言 容器化技术已经成为现代软件部署的标准实践。作为一名DevOps工程师,我在过去几年中参与了数十个项目的容器化改造,深刻体会到Docker在提升部署效率、环境一致性和运维便利性方面的巨大价值。 今天我将通过一个完整的实战案例,详细展示如何使用Docker部署一个包含…

分布式选举算法<一> Bully算法

分布式选举算法详解&#xff1a;Bully算法 引言 在分布式系统中&#xff0c;节点故障是不可避免的。当主节点&#xff08;Leader&#xff09;发生故障时&#xff0c;系统需要快速选举出新的主节点来保证服务的连续性。Bully算法是一种经典的分布式选举算法&#xff0c;以其简…

高效调试 AI 大模型 API:用 Apipost 实现 SSE 流式解析与可视化

借助 AI 大模型的实时接口&#xff08;如 OpenAI GPT 或其他第三方模型 API&#xff09;&#xff0c;开发者可以通过 SSE&#xff08;Server-Sent Events&#xff09;流式处理数据&#xff0c;实时获取模型的逐步输出。这一技术已广泛应用于实时问答、代码生成等领域。本文将基…

【网络产品经营】园区网络

园区网络的产品经营逻辑发生显著变化&#xff0c;从传统的“连接功能”导向转向“业务体验驱动”&#xff0c;并结合行业场景化需求、技术架构革新及智能化能力提升&#xff0c;形成多维度的产品策略升级。 一、技术架构变革&#xff1a;从多层复杂到极简全光 传统架构的瓶颈与…

EasyExcel 4.X 读写数据

文章目录 EasyExcel与SpringBoot集成读数据读取数据的流程定义实体类简单读取自定义监听器 读取指定sheet和所有sheet多行头读取数据格式转换列表数据实体类自定义转换器自定义监听器数据读取 写数据简单数据写出存储到磁盘返回前端下载 写出指定列宽&#xff0c;和数值精度丢失…

JVM内存管理<一>:Java内存异常问题排查

一、 内存溢出问题的排查 1. 使用工具 - jdk自带 jmapvisualvm 2. 流程 堆转储&#xff1a; (1) 方法一&#xff1a;程序运行时&#xff0c;采用&#xff1a;jmap -dump:formatb,filed:\\data\\xxlJob.hprof 23300 进行堆文件的转储 (2) 方法二&#xff1a;在内存溢出的时候…

Android中Glide.with().load().into() 应付面试源码解析

1. with(this)&#xff1a;生命周期绑定 Glide.with(Activity/Fragment/Context) 核心机制&#xff1a;创建与 UI 生命周期绑定的 RequestManager 底层实现&#xff1a; 通过 RequestManagerRetriever 获取单例 非 Application 上下文&#xff1a; 向 Activity/Fragment 添加…

#### es相关内容的索引 ####

倒排索引 结构 #### es倒排索引的结构 ####-CSDN博客 向量索引 结构应用 #### es向量检索 的 结构及应用_es 向量 文本检索-CSDN博客 ann算法 ann算法的种类有哪些&#xff0c;之间的区别&#xff0c;各自的适用场景-CSDN博客 地理信息索引 es地理信息索引的类型以及geo_po…

小飞电视:智能电视与移动设备的娱乐新选择

在数字娱乐时代&#xff0c;人们对于影视内容的需求日益增长&#xff0c;不仅追求丰富多样的节目选择&#xff0c;还希望获得便捷、个性化的观看体验。小飞电视正是这样一款专为智能电视和移动设备设计的视频娱乐应用&#xff0c;它凭借海量的影视资源、高清流畅的播放效果以及…

删除node并且重装然后重装vue

参考第一篇文章 node.js卸载与安装超详细教程_node卸载重装-CSDN博客 第二篇文章安装vue Vue安装与配置教程&#xff08;非常详细&#xff09;_安装vue-CSDN博客

基于YOLOv10算法的交通信号灯检测与识别

目录 一.&#x1f981; 写在前面1.1 实现模块划分1.2 优化与实时性支持 二.&#x1f981; 相关技术与理论基础2.1 各版本yolo对比2.2 YOLOv10网络结构 三.&#x1f981; 结果分析3.1 训练损失与验证损失分析3.2 精确率&#xff08;Precision&#xff09;、召回率&#xff08;Re…

洪水风险图制作全流程:HEC-RAS 与 ArcGIS 的耦合应用

技术点目录 一、HER-RAS理论二、一维数学模型基本地形导入三、恒定流、非恒定流一维数学模型水流计算四、一维数学模型计算结果分析五、一维数学模型增设构筑物六、二维河道水动力模拟七、HEC-RAS在溃坝模型中的应用八、HEC-RAS在洪水风险图中的应用了解更多 —————————…

视觉大语言模型未能充分利用视觉表征

视觉大语言模型未能充分利用视觉表征 FesianXu 20250612 at Wechat Search Team 前言 这两天看到一篇新挂在arxiv上的文章 [1]&#xff0c;讨论了下视觉大语言模型的视觉表征退化问题。先前的研究将VLM缺陷归咎于视觉编码器薄弱&#xff0c;并提出集成编码器方案以弥补不足&am…

SSRF3 任意文件读取

一.任意文件读取 http://192.168.112.12/pikachu-master/vul/ssrf/ssrf_curl.php?urlfile:///etc/passwd 读取文件使用 file://文件路径即可&#xff0c;这里我们换协议为file&#xff0c;然后从根目录开始读取。 /etc/passwd 我们这样修改完url路径后查看结果可以看到文件内…

洛谷P3953 [NOIP 2017 提高组] 逛公园

洛谷P3953 [NOIP 2017 提高组] 逛公园 洛谷题目传送门 题目背景 NOIP2017 D1T3 题目描述 策策同学特别喜欢逛公园。公园可以看成一张 N N N 个点 M M M 条边构成的有向图&#xff0c;且没有 自环和重边。其中 1 1 1 号点是公园的入口&#xff0c; N N N 号点是公园的出…

Vue3+TypeScript+Element Plus 表格展开行优化方案

在 Vue3 TypeScript Element Plus 项目中优化表格展开行的内存使用&#xff0c;主要从 渲染优化、数据管理 和 内存回收 三方面入手。以下是最佳实践和完整解决方案&#xff1a; 1. 懒加载展开内容&#xff08;核心优化&#xff09; 只当行展开时才渲染内容&#xff0c;避免…

OpenCV——直方图与匹配

直方图与匹配 一、直方图简介二、直方图统计三、直方图比较四、直方图均衡化五、自适应的直方图均衡化六、直方图反向投影七、模板匹配 一、直方图简介 图像直方图&#xff08;Histogram&#xff09;是一种频率分布图&#xff0c;它描述了不同强度值在图像中出现的频率。图像直…

通义大模型在文档自动化处理中的高效部署指南(OCR集成与批量处理优化)

1. 传统OCR解决方案常面临识别精度低、版面分析能力弱、处理效率瓶颈等问题。通义大模型凭借其多模态理解和生成能力&#xff0c;为文档处理领域带来革命性突破。本文将深入探讨如何高效部署通义大模型实现端到端的文档自动化处理&#xff0c;特别聚焦OCR集成与批量处理优化两…