C++学习第九课:指针的精髓与应用

C++学习第九课:指针的精髓与应用

1. 指针基础

指针是一种存储内存地址的变量,它指向另一个变量的内存位置。

int var = 10;
int *ptr = &var; // ptr是指向var的指针

2. 声明和初始化指针

声明指针时在类型前加星号(*)。

int *ptr; // 声明一个整型指针
ptr = &var; // 初始化指针,指向var的地址

3. 指针的解引用

使用星号(*)运算符来获取指针指向的数据。

std::cout << *ptr << std::endl; // 输出var的值

4. 指针的地址

指针本身也有地址,使用&运算符获取指针变量的地址。

int **ptr_to_ptr = &ptr; // 创建一个指向指针的指针

5. 指针与数组

数组名可以作为指向数组首元素的指针。

int arr[] = {1, 2, 3};
int *p = arr; // p指向数组arr的第一个元素

6. 动态内存分配

使用newdelete进行动态内存分配和释放。

int *p = new int(100); // 分配一个整数并初始化为100
delete p; // 释放分配的内存

7. 指针与函数

函数可以将指针作为参数,操作指针指向的数据。

void updateValue(int *p) {
    *p += 10;
}

int main() {
    int value = 5;
    updateValue(&value);
    std::cout << value << std::endl; // 输出15
}

8. 指针的算术运算

可以对指针进行加法和减法运算,指针的值会相应增减。

int arr[] = {10, 20, 30, 40, 50};
for (int *p = arr; p < arr + 5; ++p) {
    std::cout << *p << " "; // 使用指针遍历数组
}

9. 指针的常量性

使用const声明指向常量的指针或常量指针。

const int *ptr = &var; // 指向常量的指针,不能通过ptr修改var
int *const ptr2 = &var; // 常量指针,ptr2的值不能改变

10. sizeof与指针

sizeof运算符返回指针变量的大小,而非其指向的数据的大小。

std::cout << "Size of pointer: " << sizeof(ptr) << " bytes\n";

11. 函数重载与指针

可以利用指针进行函数重载。

void print(int *ptr) {
    std::cout << *ptr << std::endl;
}

void print(double *ptr) {
    std::cout << *ptr << std::endl;
}

12. Lambda表达式与指针

Lambda表达式可以捕获指针并使用它。

auto lambda = [ptr] { return *ptr; };
std::cout << lambda() << std::endl; // 输出ptr指向的值

代码详解示例

为了让初学者更易于理解,我们将通过一个简单的程序来展示指针的基本概念和应用。

#include <iostream>

// 函数原型:打印一个整数的值
void printValue(int value);

int main() {
    int data = 42; // 定义一个整数
    int *ptr = &data; // 创建一个指向整数的指针

    // 使用指针访问数据
    std::cout << "Value at pointer: " << *ptr << std::endl;
    std::cout << "Address stored in pointer: " << ptr << std::endl;
    std::cout << "Address of data: " << &data << std::endl;

    // 指针的自增操作
    int arr[] = {10, 20, 30, 40, 50};
    int *p = arr;
    for (int i = 0; i < 5; ++i) {
        std::cout << *(p + i) << " "; // 使用指针运算访问数组元素
    }
    std::cout << std::endl;

    // 动态内存分配
    int *dynamicInt = new int(100); // 分配内存并初始化
    printValue(*dynamicInt); // 打印动态分配的整数的值
    delete dynamicInt; // 释放内存

    // 函数返回指针
    int *result = findMax(arr, 5); // 假设findMax函数返回数组中的最大值的指针
    std::cout << "Max value is: " << *result << std::endl;

    return 0;
}

// 函数定义:打印一个整数的值
void printValue(int value) {
    std::cout << "The value is " << value << std::endl;
}

// 假设的findMax函数原型
int *findMax(int arr[], int size) {
    // ... (函数实现)
    return &arr[4]; // 这里仅作为示例返回最后一个元素的地址
}

通过上述示例,我们展示了如何声明和初始化指针、通过指针访问和修改数据、使用指针进行数组遍历、动态内存分配以及指针与函数的交互。这些是C++中指针使用的基础知识,掌握它们对于后续的学习至关重要。

结语

指针是C++中非常强大的工具,它们提供了对内存的直接控制能力。然而,不当的使用也可能导致程序出错,比如内存泄漏或者野指针问题。因此,理解指针的概念和正确使用指针是C++学习者必须掌握的技能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

神之浩劫2测试资格100%获取教程 测试资格获取方法教程

《神之浩劫》是一款基于Unreal 3&#xff08;虚幻3&#xff09;游戏引擎开发的3D团队竞技游戏&#xff0c;由美国Hi-Rez工作室开发、腾讯全球代理。2013年10月31日&#xff0c;游戏开启国服首测&#xff0c;并于2014年3月25日在美国公测。2018年1月20日&#xff0c;国服并入全球…

shell脚本-监控系统内存和磁盘容量

监控内存和磁盘容量除了可以使用zabbix监控工具来监控&#xff0c;还可以通过编写Shell脚本来监控。 #! /bin/bash #此脚本用于监控内存和磁盘容量&#xff0c;内存小于500MB且磁盘容量小于1000MB时报警#提取根分区剩余空间 disk_size$(df / | awk /\//{print $4})#提取内存剩…

Redis(七) zset有序集合类型

文章目录 前言命令ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZPOPMAXZPOPMIN两个阻塞版本的POP命令BZPOPMAX BZPOPMINZRANKZREVRANKZSCOREZREMZREMRANGEBYRANKZREMRANGEBYSCOREZINCRBY集合间操作ZINTERSTOREZUNIONSTORE 命令小结 内部编码使用场景 前言 对于有序集合这个名…

Java核心技术.卷I-上-笔记

目录 面向对象程序设计 使用命令行工具简单的编译源码 数据类型 StringBuilder 数组 对象与类 理解方法调用 继承 代理 异常 断言 日志 面向对象程序设计 面向对象的程序是由对象组成的&#xff0c;每个对象包含对用户公开的特定功能部分和隐藏的实现部分从根本上…

高校宿舍管理

在高等教育的迅猛发展浪潮中&#xff0c;大学校园正经历着前所未有的变革。随着招生规模的不断扩大&#xff0c;学生宿舍管理工作变得日益繁重和复杂。传统的管理方法&#xff0c;如使用Word和Excel进行数据记录和整理&#xff0c;已经无法满足现代高效、精准的管理需求。此外&…

关于几个水表术语的理解

GB/T778.1-2018《饮用冷水水表和热水水表 第 1 部分&#xff1a;量值要求和技术要求》、JJG162-2019《饮 用冷水水表检定规程》和 JJF1777-2019《饮用冷 水水表型式评价大纲》不仅规范了水表行业的专业名词解释&#xff0c;而且给出了影响水表性能的主要因素的定义。本文从影响…

Mellanox网卡打流命令ib_write_bw执行遇到Couldn‘t listen to port 18515原因与解决办法?

要点 要点&#xff1a; ib默认使用18515命令 相关命令&#xff1a; netstat -tuln | grep 18515 ib_write_bw --help |grep port# server ib_write_bw --ib-devmlx5_1 --port 88990 # client ib_write_bw --ib-devmlx5_0 1.1.1.1 --port88990现象&#xff1a; 根因&#xf…

Spring Cloud Feign

序言 本文给大家介绍一下 Spring Cloud Feign 的基础概念以及使用方式。 一、远程调用 在传统的单体系统中&#xff0c;我们通常是客户端去请求服务端的接口。但是在分布式的系统中&#xff0c;常常需要一个服务去调用另外一个服务的接口。在服务端如何去调用另外一个服务端…

docker compose mysql主从复制及orchestrator高可用使用

1.orchestrator 功能演示&#xff1a; 1.1 多级级联&#xff1a; 1.2 主从切换&#xff1a; 切换成功后&#xff0c;原来的主库是红色的&#xff0c;需要在主库的配置页面点击“start replication ”&#xff0c;重新连接上新的主库。 1.3 主从故障&#xff0c;从库自动切换新…

pyqt字体选择器

pyqt字体选择器 pyqt字体选择器效果代码 pyqt字体选择器 pyqt中QFontDialog 类是一个预定义的对话框&#xff0c;允许用户选择一个字体并设置其样式、大小等属性。 效果 代码 from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton, QFontD…

信息收集。

信息收集 接着使用cs进行信息收集 发现域内管理员账号。 然后查看pc信息&#xff0c; 查看进程。 发现域为god.org 尝试定位域控。 提权 使用cs的功能进行权限提权 成功获取管理员权限。 hash抓取 接着抓hash 成功抓到管理员账号、密码。 接着进行横向传递 成功获取AD和…

从曝光到安装:App传参安装的关键步骤与数据指标

随着移动互联网的普及&#xff0c;手游市场日益繁荣&#xff0c;手游推广方式也日新月异。在这个竞争激烈的市场中&#xff0c;如何有效地推广手游&#xff0c;吸引更多的用户&#xff0c;成为了开发者和广告主关注的焦点。而Xinstall作为国内专业的App全渠道统计服务商&#x…

Android Widget开发代码示例详细说明

因为AppWidgetProvider扩展自BroadcastReceiver, 所以你不能保证回调函数完成调用后&#xff0c;AppWidgetProvider还在继续运行。 a. AppWidgetProvider 的实现 /*** Copyright(C):教育电子有限公司 * Project Name: NineSync* Filename: SynWidgetProvider.java * Author(S…

ORACLE 11G RAC 访问SQLSERVER

平时都是单机&#xff0c;RAC有点不一样&#xff0c;其实也一样。 目录 1.操作环境信息 2.安装GATEWAY 3.配置实例信息 4.配置监听 5.配置网络别名 6.创建到SQLSERVER的DBLINK 7.测试DBLINK有效性 1.操作环境信息 HIS PACS 数据库版本 ORACLE 11.2.0.4 RAC MS SQLSE…

C++多态(全)

多态 概念 调用函数的多种形态&#xff0c; 多态构成条件 1&#xff09;父子类完成虚函数的重写&#xff08;三同&#xff1a;函数名&#xff0c;参数&#xff0c;返回值相同&#xff09; 2&#xff09;父类的指针或者引用调用虚函数 虚函数 被virtual修饰的类成员函数 …

Llama images - 记录我看到的那些羊驼

来自 &#xff1a; DREAM: Distributed RAG Experimentation Framework

73、栈-柱状图中最大的矩形

思路&#xff1a; 矩形面积&#xff1a;宽度*高度 高度如何确定呢&#xff1f;就是在宽度中最矮的元素。如何确定宽度&#xff0c;就是要确定左右边界。 当我们在处理直方图最大矩形面积问题时&#xff0c;遇到一个比栈顶柱子矮的新柱子时开始计算面积的原因关键在于如何确定…

Hotcoin Research|玩赚WEB3:Seraph零成本赚取技巧

在《Seraph》这款游戏里&#xff0c;要提升自己的游戏技能和体验&#xff0c;了解如何免费赚取游戏货币灵魂晶石并挑战游戏主线是非常重要的。你可以通过卖东西、参加虚空异界地图和混沌秘境来在游戏里赚更多的钱&#xff0c;并更享受游戏的乐趣。最酷的是&#xff0c;得到的灵…

低功耗数字IC后端设计实现典型案例| UPF Flow如何避免工具乱用Always On Buffer?

下图所示为咱们社区低功耗四核A7 Top Hierarchical Flow后端训练营中的一个案例&#xff0c;设计中存在若干个Power Domain&#xff0c;其中Power Domain2(简称PD2)为default Top Domain&#xff0c;Power Domain1&#xff08;简称PD1&#xff09;为一个需要power off的domain&…

三星电子与蔡司达成新合作 | 百能云芯

近日&#xff0c;三星电子会长李在镕的欧洲之行备受瞩目&#xff0c;他特别造访了德国光学巨擘蔡司的总部&#xff0c;并与其高层进行了深入的会谈。 据韩国前锋报报道&#xff0c;三星电子在28日宣布&#xff0c;李在镕在26日与蔡司执行长兰普瑞特&#xff08;Karl Lamprecht&…
最新文章