news 2026/1/10 17:53:11

C++中的指针变量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++中的指针变量

指针是C++中的一个核心概念,它存储的是内存地址,而不是实际的值。理解指针对于掌握C++编程至关重要。

1. 基本概念

指针的定义和声明

intx=10;// 普通变量int*ptr=&x;// 指针变量,存储x的地址
  • *表示声明一个指针
  • &是取地址运算符
  • ptr存储的是x的内存地址
  • *ptr是解引用,获取该地址存储的值

2. 指针的基本操作

#include<iostream>usingnamespacestd;intmain(){intx=10;int*ptr=&x;// ptr指向xcout<<"x的值: "<<x<<endl;// 输出: 10cout<<"x的地址: "<<&x<<endl;// 输出: x的地址cout<<"ptr的值: "<<ptr<<endl;// 输出: x的地址cout<<"*ptr的值: "<<*ptr<<endl;// 输出: 10*ptr=20;// 通过指针修改x的值cout<<"修改后x的值: "<<x<<endl;// 输出: 20return0;}

3. 指针类型

空指针

int*ptr=nullptr;// C++11及以后推荐int*ptr=0;// 传统方式int*ptr=NULL;// C风格,不推荐在C++中使用

悬空指针(野指针)

指向已释放内存的指针,使用会导致未定义行为:

int*ptr=newint(10);deleteptr;// ptr现在成为悬空指针,应该避免使用ptr=nullptr;// 好习惯:释放后置为空

4. 指针运算

intarr[5]={1,2,3,4,5};int*ptr=arr;// 指向数组首元素cout<<*ptr<<endl;// 输出: 1cout<<*(ptr+1)<<endl;// 输出: 2(指针加法)cout<<ptr[2]<<endl;// 输出: 3(数组语法)ptr++;// 移动到下一个元素cout<<*ptr<<endl;// 输出: 2

5. 动态内存分配

// 分配单个变量int*p=newint;// 分配内存*p=100;// 赋值deletep;// 释放内存p=nullptr;// 置空// 分配数组int*arr=newint[5];// 分配5个int的空间for(inti=0;i<5;i++){arr[i]=i*10;}delete[]arr;// 释放数组内存

6. 多级指针

intx=10;int*p=&x;// 一级指针int**pp=&p;// 二级指针int***ppp=&pp;// 三级指针cout<<x<<endl;// 10cout<<*p<<endl;// 10cout<<**pp<<endl;// 10cout<<***ppp<<endl;// 10

7. 指针和函数

指针作为函数参数(按地址传递)

voidswap(int*a,int*b){inttemp=*a;*a=*b;*b=temp;}intmain(){intx=5,y=10;swap(&x,&y);// 传递地址cout<<x<<", "<<y<<endl;// 输出: 10, 5return0;}

返回指针的函数

int*createArray(intsize){returnnewint[size];// 返回动态数组的指针}// 注意:不要返回局部变量的地址int*badFunction(){intx=10;return&x;// 错误!x在函数结束后被销毁}

8. 指针和数组

intarr[3]={1,2,3};// 数组名在多数情况下退化为指针int*ptr=arr;// 等价于 int *ptr = &arr[0];// 通过指针遍历数组for(inti=0;i<3;i++){cout<<*(ptr+i)<<" ";// 输出: 1 2 3}

9. const 和指针

intx=10;inty=20;// 指向常量的指针(不能通过指针修改值)constint*ptr1=&x;// *ptr1 = 30; // 错误!ptr1=&y;// 正确:可以改变指向// 常量指针(不能改变指向)int*constptr2=&x;*ptr2=30;// 正确:可以修改值// ptr2 = &y; // 错误!// 指向常量的常量指针constint*constptr3=&x;// *ptr3 = 30; // 错误!// ptr3 = &y; // 错误!

10. 智能指针(C++11及以上)

智能指针自动管理内存,避免内存泄漏:

#include<memory>// unique_ptr:独占所有权std::unique_ptr<int>uptr(newint(10));// shared_ptr:共享所有权std::shared_ptr<int>sptr1=std::make_shared<int>(20);std::shared_ptr<int>sptr2=sptr1;// 引用计数增加// weak_ptr:弱引用,不增加引用计数std::weak_ptr<int>wptr=sptr1;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/10 8:11:26

2025十大项目管理工具揭晓:从轻量协作到企业级方案全解析

在数字化的交响乐中&#xff0c;项目管理工具扮演着指挥家的角色&#xff0c;它协调着团队的每一个音符&#xff0c;确保最终奏出和谐的乐章。然而&#xff0c;乐章的规模与风格千差万别——有时是三两知己的室内乐&#xff0c;有时是气势磅礴的交响合唱。因此&#xff0c;工具…

作者头像 李华
网站建设 2025/12/31 8:09:26

26Java基础之特殊文本文件、日志技术

特殊文件为什么要用这些特殊文件&#xff1f;存储多个用户的&#xff1a;用户名、密码Rropertiesimage是一个Map集合(键值对集合)&#xff0c;但是我们一般不会当集合使用。核心作用&#xff1a;Properties是用来代表属性文件的&#xff0c;通过Properties可以读写属性文件里的…

作者头像 李华
网站建设 2026/1/8 21:44:37

AI投喂Geo优化系统哪家经验丰富?深度解析行业领先服务商

AI投喂Geo优化系统哪家经验丰富&#xff1f;深度解析行业领先服务商 在人工智能技术深度赋能各行业的当下&#xff0c;如何高效、精准地向AI模型“投喂”地理空间&#xff08;Geo&#xff09;数据&#xff0c;已成为企业提升智能决策能力、优化本地化运营的关键。一个经验丰富…

作者头像 李华
网站建设 2026/1/3 23:45:05

专业的煤矿水仓清淤公司

专业的煤矿水仓清淤公司&#xff1a;技术革新与安全作业的守护者煤矿水仓作为矿井排水系统的核心枢纽&#xff0c;其畅通与否直接关系到整个矿山的安全生产与运营效率。专业的煤矿水仓清淤公司&#xff0c;正是保障这一关键环节高效、安全运行的中坚力量。随着行业对安全、环保…

作者头像 李华
网站建设 2026/1/10 11:05:17

GPT-5.2 的数据基石、原生多模态与隐私承诺

模型的强大&#xff0c;离不开其背后的数据和架构。随着 GPT-5.2 的专业性能达到新高度&#xff0c;用户对于其训练数据的构成、时效性以及如何处理多模态输入的兴趣也日益增加。同时&#xff0c;在高可靠性承诺的背后&#xff0c;OpenAI 对用户隐私和数据安全采取了哪些新的保…

作者头像 李华
网站建设 2025/12/30 22:31:13

16、Lotus Domino 6在Linux系统中的数据备份与安全保障

Lotus Domino 6在Linux系统中的数据备份与安全保障 在当今数字化时代,数据对于企业的重要性不言而喻。对于使用Lotus Domino的企业来说,确保数据的安全性和可恢复性至关重要。本文将详细介绍相关的安全工具、备份策略、管理方法、硬件配置以及操作系统备份工具。 1. 安全工…

作者头像 李华