首页 > 系统相关 >C++ 指针基础:开启内存操控之门

C++ 指针基础:开启内存操控之门

时间:2024-12-24 19:58:20浏览次数:11  
标签:指向 int C++ num 内存 ptr 指针

1. 指针为何如此重要

在 C++ 编程领域,指针堪称一项极为关键的特性。它赋予了程序员直接访问和操控内存的能力,这使得程序在处理复杂数据结构与优化性能时具有更高的灵活性。想象一下,在编写大型程序时,高效地管理内存资源是多么重要,而指针就是实现这一目标的有力工具。例如,在处理链表、树等动态数据结构时,指针能够帮助我们轻松地构建和遍历这些结构,极大地提高编程效率。

2. 指针基础:声明与初始化

指针本质上是一种变量,它存储的是其他变量在内存中的地址。要声明一个指针,需在类型名称后加上*。例如,声明一个指向int类型的指针:

int *ptr;

这里,ptr就是一个指向int类型数据的指针变量。然而,此时ptr并未指向任何有效的内存地址,这就需要对其进行初始化。
初始化指针有两种常见方式。一种是让它指向一个已存在的变量:

int num = 10;
int *ptr = #

 

这里的&是取地址运算符,它获取num变量的内存地址,并将其赋值给指针ptr,这样ptr就指向了num

另一种初始化指针的方式是在动态分配内存时进行:

int *ptr = new int;
*ptr = 20;

new int在堆内存中分配了一块用于存储int类型数据的空间,并返回该空间的地址,赋值给ptr。然后通过解引用ptr(即*ptr)来给这块内存赋值。

3. 指针解引用:访问内存中的值

一旦指针指向了某个内存地址,我们就可以通过解引用运算符*来访问该地址中存储的值。例如:

int num = 10;
int *ptr = #
std::cout << "通过指针访问的值: " << *ptr << std::endl;

 这里*ptr表示获取ptr所指向的内存地址中的值,也就是num的值。不仅如此,我们还能通过指针修改所指向的值:

*ptr = 30;
std::cout << "修改后的值: " << num << std::endl;

 

可以看到,通过修改*ptr,实际上修改了num的值,因为ptr指向了num的内存地址。

4. 指针与数组的紧密联系

在 C++ 中,数组与指针有着千丝万缕的联系。数组名本身就可以看作是一个指向数组首元素的常量指针。例如:

int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;

 这里arrptr都指向数组arr的首元素arr[0]。通过指针来访问数组元素,可以使用偏移量的方式:

for (int i = 0; i < 5; ++i) {
    std::cout << *(ptr + i) << " ";
}

ptr + i表示从指针ptr(即数组首元素地址)开始,偏移i个元素的地址,*(ptr + i)则获取该地址处的值,即arr[i]

5. 总结

指针作为 C++ 的重要特性,为我们提供了深入内存操作的能力。理解指针的声明、初始化、解引用以及与数组的关系,是迈向 C++ 高级编程的重要一步。在后续的学习中,我们将进一步探索指针在动态内存管理、函数指针等方面的应用。

标签:指向,int,C++,num,内存,ptr,指针
From: https://blog.csdn.net/m0_74620645/article/details/144701645

相关文章

  • [C++] 小游戏 能量 1.1.1 版本 zty出品
    前言今天zty带来的是能量1.1.1版本,好久没出游戏啦,大家给个赞呗,zty还要上学,发作品会少一点                           先 赞 后 看  养  成 习 惯               ......
  • 职工信息管理系统 C++课程设计
    课程设计课程名称:C++课程设计设计课题:职工信息管理系统指导教师:总评成绩:专业:软件工程班级:姓名:学号:二O二四年六月三十日目录第一章课设目标、内容及要求11.1课设目标11.2课程设计内容和要求11.2.1需求分析11.2.2系统功能11.2.3设计要......
  • C++竞赛题
    题目一:小苹果题目描述:小明有一堆苹果,他想将这些苹果分给几个朋友。每个朋友得到的苹果数量必须是连续的自然数,且总和等于小明拥有的苹果总数。请计算有多少种不同的分配方式。输入格式:第一行包含一个整数N,表示苹果的总数。输出格式:输出一个整数,表示分配方式的总数。样......
  • Java内存模型-static关键字
    Java内存模型-static关键字java内存概览static关键字静态变量和实例变量的区别静态方法和成员方法的区别java内存概览栈内存:概念:栈内存是线程私有的内存区域,每个线程在创建时都会分配一个独立的栈空间用途:存放局部变量,调用方法举例:某方法被调用时创建栈空间,里面语......
  • 双指针
    @目录双指针基本介绍应用场景例题A-B数对排列排序总结双指针基本介绍双指针主要用于处理数组或链表等线性数据结构中的问题。它的基本思想是使用两个指针(通常是两个变量)来遍历或操作数据,这两个指针可以指向数组的开始和结束位置,也可以根据具体问题指向其他位置。双指针算法能够......
  • 【C++boost::asio网络编程】有关服务端退出方法的笔记
    有关服务端退出方法的笔记C风格的信号关闭boost::asio中的关闭方式原来服务端的main函数如下intmain(){ try { boost::asio::io_contextioc; Servers(ioc,8888); ioc.run(); } catch(conststd::exception&) { } return0;}  上面弊端在......
  • 实验六c++
    实验任务四源代码Vector.hpp1#include<iostream>2#include<stdexcept>3usingnamespacestd;45template<typenameT>6classVector{7public:8Vector(intn);9Vector(intn,Ta);10Vector(constVector<T>&......
  • 模拟法练习C++ 2
    1. 陶陶摘苹果题目描述陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高......
  • 模拟法练习C++ 1
    有错请指出!对于模拟法,百度定义是其实,没有这么麻烦,也就是题目是什么,我们就怎么写,也可以说它是不是算法的算法,最好把代码模块化特点:1.题目简单,代码量很大2.不好找错误3.在比赛中经常考 4.代码灵活下面是几道例题1.扑克游戏题目描述三张扑克牌比大小,每个人从扑克牌中......
  • C++函数重载
    #include<stdio.h>classTimer{public:Timer(){min=0;sec=0;}voidadd(intsec){this->sec+=sec;}voidshow(){printf(&qu......