【C++ 入坑指南】(11)指针

news2024/10/5 18:28:11

在这里插入图片描述

文章目录

    • 一、概念
    • 定义和使用
    • 二、空指针 & 野指针
      • 2.1 空指针
      • 2.2 野指针
      • 2.3 小结
    • 三、const 修饰的指针
    • 四、指针 和 数组
    • 五、指针和函数
    • 六、实例

学习 C++ 的指针既简单又有趣。通过指针,可以简化一些 C++ 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C++ 程序员,学习指针是很有必要的。

一、概念

作用:可以通过指针间接访问内存。(指针就是一个地址)

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

定义和使用

语法数据类型 * 变量名;

示例

#include <iostream>

using namespace std;



int main()
{
	// 指针
	int var = 7;

	int * p;  // 指针的声明

	p = &var;

	cout << "指针变量中的地址为:" << p << endl;
	cout << "访问指针中地址的值为:" << *p << endl;
	
	return 0;
}

二、空指针 & 野指针

2.1 空指针

定义:指针变量指向内存中编号为 0 的空间。

用途:初始化指针变量。

注意:空指针指向的内存是不可以访问的。

2.2 野指针

定义:指针变量指向非法的内存空间。

2.3 小结

空指针和野指针都不是我们申请的空间,因此不要访问。

三、const 修饰的指针

const 修饰的指针有三种:(int a = 7, b= 7;

  1. const 修饰指针 (常量指针)如:const int * p = &a;
    特点:指针指向可以修改,指针指向的值不可以修改。
p = &b; // 正确

p = 100; //错误
  1. const 修饰常量 (指针常量)如:int * const p = &a;
    特点:指针指向不可以修改,指针指向的值可以修改。
p = &b; // 错误

p = 100; //正确
  1. const 既修饰常量又修饰指针,如:const int * const p = &a;
    特点:指针指向和指针指向的值都不可以修改。
p = &b; // 错误

p = 100; //错误

四、指针 和 数组

示例:通过指针遍历数组

#include <iostream>

using namespace std;

int main()
{
	// 指针遍历数组
	int arr[] = { 1,3,5,7 };

	int* p = arr;

	for (int i = 0; i < 4; i++)
	{
		cout << *p << endl;
		p++;
	}
	return 0;
}


五、指针和函数

示例:地址传递

#include <iostream>

using namespace std;

void swap(int* a, int* b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
}

int main()
{
	// 指针遍历数组
	int a = 10;
	int b = 20;

	swap(&a, &b);

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
 
	return 0;
}

六、实例

代码

#include <iostream>

using namespace std;

// 地址值互换函数的声明
void swap(int* num1, int* num2);

// 冒泡排序函数的声明
void bubbleSort(int* arr, int len);

// 打印数组函数的声明
void printArray(int* arr, int len);

int main()
{
	// 实例:封装一个函数,利用冒泡排序,实现对整型数组的升序排序
	int arr[] = { 2,12,16,88,5,10,7,3 };

	int len = sizeof(arr) / sizeof(arr[0]);

	// 冒泡排序
	bubbleSort(arr, len);

	// 打印输出排序后的数组
	printArray(arr, len);
 
	return 0;
}

void bubbleSort(int* arr, int len)
{
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = 0; j < len - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				swap(&arr[j], &arr[j + 1]);
			}

		}
	}
}

void swap(int* num1, int* num2)
{
	int temp = *num1;
	*num1 = *num2;
	*num2 = temp;
}

void printArray(int* arr, int len)
{
	for (int i = 0; i < len; i++)
	{
		cout << arr[i] << endl;
	}
}

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

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

相关文章

数据全生命周期管理

数据存储 时代"海纳百川&#xff0c;有容乃大"意味结构化、半结构和非结构化多样化的海量的 &#xff0c;也意味着批数据和流数据多种数据形式的存储和计算。面对不同数据结构、数据形式、时效性与性能要求和存储与计算成本等因素考虑&#xff0c;应该使用适合的存储…

组合预测模型 | ARIMA-CNN-LSTM时间序列预测(Python)

组合预测模型 | ARIMA-CNN-LSTM时间序列预测&#xff08;Python&#xff09; 目录 组合预测模型 | ARIMA-CNN-LSTM时间序列预测&#xff08;Python&#xff09;预测结果基本介绍程序设计参考资料 预测结果 基本介绍 ARIMA-CNN-LSTM是一种结合了传统时间序列模型和深度学习模型的…

chatgpt赋能Python-python3的下载

Python 3-您在编程路上不可或缺的伙伴 如果您正在寻找一种流行的编程语言&#xff0c;那么Python 3就是一个不错的选择。Python 3作为一种高级编程语言&#xff0c;可以轻松地创建各种应用程序和网站。它是最受欢迎的编程语言之一&#xff0c;就是因为它易于学习和使用。 Pyt…

本地部署 VisualGLM-6B

本地部署 VisualGLM-6B 1. 什么是 VisualGLM-6B2. Github 地址3. 安装 Miniconda34. 创建虚拟环境5. 安装 VisualGLM-6B6. 启动 VisualGLM-6B7. 访问 VisualGLM-6B8. API部署9. 命令行部署 1. 什么是 VisualGLM-6B VisualGLM-6B 是一个开源的&#xff0c;支持图像、中文和英文…

大模型时代下智能文档处理核心技术大揭秘

大模型时代下智能文档处理核心技术大揭秘 前言一张图全览文档图像分析与预处理图像预处理的整体架构核心技术点应用场景 版面分析与还原整体架构核心技术点应用场景 AI安全文档图像篡改检测 大模型时代思考总结 前言 最近&#xff0c;中国图像图形大会在苏州圆满结束&#xff0…

碳交易机制下考虑需求响应的综合能源系统优化运行(matlab代码)

目录 1 主要内容 架构模型&#xff1a; 需求响应模型&#xff1a; 目标函数&#xff1a; 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序复现文献《碳交易机制下考虑需求响应的综合能源系统优化运行》&#xff0c;解决碳交易机制下考虑需求响应的综合能源系统优化…

Emacs之快速高亮查找字符(九十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

ubuntu22.04静态ip设置(桥接模式、only-host+NAT模式)

在创建一台虚拟机后&#xff0c;默认的方式往往是通过DHCP动态的进行分配&#xff0c;DHCP服务器会告知创建的虚拟机分配到的ip地址&#xff0c;网关地址等信息。所以在创建好虚拟机之后&#xff0c;这些信息都不需要我们来配置&#xff0c;我们直接用就好了。 但是&#xff0…

redis集群之hash槽分析算法

上文提过了 hash取余算法和hash一致性算法 一致性hash算法是为了减少节点数目发生改变时尽可能的减少数据迁移 将所有的存储节点排在首位相连的Hash环上&#xff0c;每个key在计算hash后会顺时针找到临近的存储节点。 而当有节点加入或退出时&#xff0c;仅影响该节点在hash环上…

chatgpt赋能Python-python3求平均值

Python3求平均值-从基础到实践 Python3作为一种广泛使用的编程语言&#xff0c;被广泛应用于不同的领域。今天我们将探讨如何使用Python3求平均值。求平均值在数学和统计学中非常常见&#xff0c;使我们能够了解数据的中心趋势&#xff0c;并简化数据分析过程。让我们深入了解…

DELPHI7实现XP菜单风格

在DELPHI7中不使用任何第三方控件,实现放在工具栏上可拖动的XP风格菜单 今天有点空闲时间,顺便写点东西,不是什么深奥的东西,但实用,对于不想第三方控件但又想加点效果的朋友可能有点用.实现的效果如图: 步骤一:把Win32面板上把CoolBar组件加到窗体上 步骤二:把Additional面板上…

VBA 密码删除软件 4n6.VBA Password Remover 1.2 Crack

VBA 密码删除软件 软件评级&#xff08;基于 1541 条评论的平均评分 4.8&#xff09; 该工具是完美的软件&#xff0c;可以解锁任何类型的受密码保护的 VBA 文件。用户可以轻松使用此 VBA 密码删除软件并从 VBA 文件中删除密码保护。 兼容所有 Office 文件格式&#xff1a;.d…

Linux线程5——生产消费模型

生产消费模型 1个交易场所:超市 2种角色:生产者/消费者 3种关系:生产者和生产者(竞争关系也叫互斥关系),消费者和消费者(竞争关系同样是互斥关系),生产者和消费者(互斥,同步关系:生产完再消费或消费完再生产)。 以上是生产消费模型遵守的“321”原则。 生产者和消…

RocketMQ Connect 核心知识点概述

一、概览 RocketMQ Connect是RocketMQ数据集成重要组件&#xff0c;可将各种系统中的数据通过高效&#xff0c;可靠&#xff0c;流的方式&#xff0c;流入流出到RocketMQ&#xff0c;它是独立于RocketMQ的一个单独的分布式&#xff0c;可扩展&#xff0c;可容错系统&#xff0…

英文文本情感分析textblob模块sentiment方法

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 英文文本情感分析 textblob模块 sentiment方法 [太阳]选择题 关于下列代码说法错误的是&#xff1f; from textblob import TextBlob myText"Textblob is amazingly simple to us…

chatgpt赋能Python-python3绝对值

Python3绝对值——学习Python3编程的基础 Python3是一种非常流行的编程语言&#xff0c;可以应用于各种不同的场景&#xff0c;例如数据科学、机器学习、网络编程、自动化脚本、游戏开发等。在Python3编程中&#xff0c;绝对值是一个基础的概念。 什么是绝对值&#xff1f; …

【网络编程】实现UDP/TCP客户端、服务器

目录 一、UDP 1、Linux客户端、服务器 1.1udpServer.hpp 1.2udpServer.cc 1.3udpClient.hpp 1.4udpClient.cc 1.5onlineUser.hpp 2、Windows客户端 二、TCP 1、单进程版的TCP客户端、服务器 1.1tcpServer.hpp 1.2tcpServer.cc 1.3tcpClient.hpp 1.4tcpClient.cc …

K8s进阶1——kubeadm工具搭建K8s高可用集群

文章目录 一、资源清单二、系统初始化2.1 所有服务器配置2.2 master节点配置 三、nginxkeepalived3.1 主备机器上进行3.2 配置主节点3.3 配置备节点3.4 启动服务 四、部署etcd集群4.1 资源清单4.2 生成Etcd证书4.3 部署Etcd集群 五、安装Docker/kubeadm/kubelet5.1 安装docker5…

ESP32-C3入门教程 问题篇⑱——VSCode ESP-IDF Monitor device 波特率不对导致乱码

文章目录 一、前言二、发现问题三、分析问题一、前言 本文基于VS Code IDE进行编程、编译、下载、运行等操作 基础入门章节请查阅:ESP32-C3入门教程 基础篇①——基于VS Code构建Hello World 教程目录大纲请查阅:ESP32-C3入门教程——导读 二、发现问题 升级了VSCode,没注意…

GDB调试无行号,报dwarf error问题解决

背景 近期我开发的一个C程序&#xff0c;在生产环境产生了coredump&#xff0c;但是在调试该core文件时&#xff0c;打出的debug信息并不全。 这种debug信息丢失&#xff0c;其实说白了&#xff0c;就是符号表丢失。一般由两种情况造成&#xff0c;一种是编译的时候没有加-g参…