当前位置: 首页 > news >正文

C语言之指针的地址和指向的内容总结(八十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏:多媒体系统工程师系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:C语言之指针的地址和指向的内容总结与用法。

2.指针的地址和指向的内容介绍

  • C语言中的指针是一个非常重要的概念,它涉及到内存地址和数据内容的访问。在C语言中,指针变量可以存储其他变量的地址,通过指针我们可以直接访问内存中的数据。本篇文章将对C语言中指针的地址和指向的内容进行总结。
  • 首先,我们需要明确指针的两个基本概念:地址和指针变量。在计算机中,每个变量都占用一段内存空间,这个内存空间有一个唯一的地址。指针变量是一个特殊类型的变量,它的值为内存地址。通过指针变量,我们可以找到内存中对应的数据。
  • 接下来,我们来了解一些关于指针的基础知识。指针变量在内存中占用4个字节(在32位系统中)或8个字节(在64位系统中)的空间,因为指针变量存储的是内存地址,而内存地址通常是一个32位或64位的二进制数。指针变量本身是一个变量,它也可以被其他指针变量指向,这种关系称为指针的指针,或者称为二级指针。
  • 在C语言中,我们使用取地址运算符(&)来获取一个变量的地址。例如,如果我们有一个整型变量a,我们可以使用&a来获取变量a的地址。同样,我们使用间接寻址运算符()来获取指针变量指向的数据。例如,如果我们有一个指向整型变量a的指针变量p,我们可以使用p来获取变量a的值。
  • 指针的类型对于指针的使用非常重要。指针的类型决定了指针所指向的数据的类型。例如,一个指向整型变量的指针变量,其类型为int*;一个指向字符型变量的指针变量,其类型为char*。我们在定义指针变量时,必须指定指针的类型,这样编译器才知道指针所指向的数据类型,从而保证程序的正确性。
  • 指针的运算包括指针与整数的运算、指针与指针的运算以及指针与关系运算的运算。指针与整数的运算指的是指针变量与整数进行加减运算。例如,如果有一个整型指针变量p,我们可以使用p+1来将指针向后移动一个整型数据的大小。指针与指针的运算指的是两个指针变量进行加减运算。例如,如果有两个整型指针变量p1和p2,我们可以使用p1-p2来计算两个指针之间的距离。指针与关系运算的运算指的是使用关系运算符(如>、<、==等)来比较两个指针变量的大小。
  • 最后,我们来总结一下C语言中指针的地址和指向的内容。指针的地址是指针变量在内存中的位置,而指针指向的内容是指针变量所指向的数据。通过指针,我们可以直接访问内存中的数据,从而实现对数据的快速访问和修改。指针的使用需要谨慎,因为错误的指针使用可能会导致程序崩溃或者产生不可预测的结果。因此,在实际编程中,我们需要充分了解指针的本质,掌握指针的基本操作,并遵循良好的编程习惯,以确保程序的稳定性和可靠性。

3.实例用法

<1>.改变指针指向的地址:实例用法

#include <iostream>
#include <string.h>
using namespace std;int main(){char p[64] = "XiaoMi";char *p1 = p;char *p2 = p1;//打印p、p1、p2地址printf("addr(p) = %p\n",p);printf("addr(p1) = %p\n",p1);printf("addr(p2) = %p\n",p2);//打印p1、p2指向的内容printf("p1 = %s\n",p1);printf("p2 = %s\n\n",p2);//改变p2指向的地址p2 = "VIVO";//打印p、p1、p2地址printf("addr(p) = %p\n",p);printf("addr(p1) = %p\n",p1);printf("addr(p2) = %p\n",p2);//打印p1、p2指向的内容printf("p1 = %s\n",p1);printf("p2 = %s\n",p2);return 0;
}

打印结果:

addr(p) = 0x7fff95611910
addr(p1) = 0x7fff95611910
addr(p2) = 0x7fff95611910
p1 = XiaoMi
p2 = XiaoMiaddr(p) = 0x7fff95611910
addr(p1) = 0x7fff95611910
addr(p2) = 0x56487c779043
p1 = XiaoMi
p2 = VIVO

总结:通过改变p2指向的地址,从而改变p2指向的内容,此时p2的地址与p和p1已经不同,它重新指向一个字符串常量。

<2>.改变指针指向的内容:实例用法

#include <iostream>
#include <string.h>
using namespace std;int main(){char p[64] = "XiaoMi";char *p1 = p;char *p2 = p1;printf("addr(p) = %p\n",p);printf("addr(p1) = %p\n",p1);printf("addr(p2) = %p\n",p2);printf("p1 = %s\n",p1);printf("p2 = %s\n\n",p2);memset(p2, 0, 32);memcpy(p2, "VIVO", 4);printf("addr(p) = %p\n",p);printf("addr(p1) = %p\n",p1);printf("addr(p2) = %p\n",p2);printf("p1 = %s\n",p1);printf("p2 = %s\n",p2);return 0;
}

打印结果:

addr(p) = 0x7ffe0c586040
addr(p1) = 0x7ffe0c586040
addr(p2) = 0x7ffe0c586040
p1 = XiaoMi
p2 = XiaoMiaddr(p) = 0x7ffe0c586040
addr(p1) = 0x7ffe0c586040
addr(p2) = 0x7ffe0c586040
p1 = VIVO
p2 = VIVO

总结:通过改变p2指向的内容,但是没有p2的地址,因为p、p1、p2指向的是同一个地址,所以改变他们其中一个的内容,则他们所有的内容都改变了。

相关文章:

C语言之指针的地址和指向的内容总结(八十四)

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

1月25日,每日信息差

第一、中国和新加坡互免签证&#xff0c;新加坡酒店搜索量较发布前增长4倍。去哪儿数据显示&#xff0c;新加坡酒店搜索量较发布前增长4倍&#xff0c;仍在持续增长中。同程旅行数据显示&#xff0c;消息发布半小时内&#xff0c;同程旅行平台新加坡相关搜索热度较前日同一时段…...

前端工程化之:webpack1-3(模块化兼容性)

一、模块化兼容性 由于 webpack 同时支持 CommonJs 和 ES6 module &#xff0c;因此需要理解它们互操作时 webpack 是如何处理的。 二、同模块化标准 如果导出和导入使用的是同一种模块化标准&#xff0c;打包后的效果和之前所说的模块化没有任何差异。 CommonJS&#xff…...

JDK8新特性(一)

一、概述 JDK8&#xff0c;又称为JDK 1.8&#xff0c;是Java语言开发的里程碑版本。这个版本引入了众多令人兴奋的新特性&#xff0c;让Java更加灵活和强大。其中&#xff0c;最引人注目的新特性包括Lambda表达式、方法引用、默认方法、Stream API、新的日期和时间API以及Optio…...

java实现ftp协议远程网络下载文件

引言 在开发过程中&#xff0c;偶尔会遇到网络文件在FTP服务上存储着&#xff0c;对于这种情况想要下载到本地还有些麻烦&#xff0c;我们直接上世界上最简单的代码。 How to do 1.提前引入包 <!--hutool万能工具包--><dependency><groupId>cn.hutool<…...

深入浅出理解目标检测的NMS非极大抑制

一、参考资料 物体检测中常用的几个概念迁移学习、IOU、NMS理解 目标定位和检测系列&#xff08;3&#xff09;&#xff1a;交并比&#xff08;IOU&#xff09;和非极大值抑制&#xff08;NMS&#xff09;的python实现 Pytorch&#xff1a;目标检测网络-非极大值抑制(NMS) …...

HbuilderX报错“Error: Fail to open IDE“,以及运行之后没有打开微信开发者,或者运行没有反应的解决办法

开始 问题:HbuilderX启动时,打开微信开发者工具报错"Error: Fail to open IDE",以及运行之后没有打开微信开发者,或者运行没有反应的解决办法! 解决办法: 按照步骤一步一步完成分析,除非代码报错,否则都是可以启动的 第一步:检查HbuildX是否登录账号 第二步:检查微信…...

【Go 快速入门】基础语法 | 流程控制 | 字符串

文章目录 基础语法值变量常量运算符指针new 和 make 区别 字符串byte 和 rune 类型 流程控制for 循环If else 分支switch 分支 基础语法 项目代码地址&#xff1a;02-basicgrammar 值 基本类型值 Go 最基础的数据类型&#xff0c;比如整型、浮点型、布尔型。 复合类型值 …...

腾讯云轻量应用Ubuntu服务器如何一键部署幻兽帕鲁Palworld私服?

幻兽帕鲁/Palworld是一款2024年Pocketpair开发的开放世界生存制作游戏&#xff0c;在帕鲁的世界&#xff0c;玩家可以选择与神奇的生物“帕鲁”一同享受悠闲的生活&#xff0c;也可以投身于与偷猎者进行生死搏斗的冒险。而帕鲁可以进行战斗、繁殖、协助玩家做农活&#xff0c;也…...

Redis的SDS你了解吗?

初识SDS&#xff1a; Redis的String和其他很多编程语言中的语义相似&#xff0c;它能够表达3种值的类型&#xff1a; 1.字符串 2.整数 3.浮点数 三种类型根据具体场景由Redis完成相互之间的自动转换&#xff0c;并且根据需要选取底层的承载方式&#xff0c;Redis内部&#x…...

C#中常见的软件设计模式及应用场景

文章目录 前言1、单例模式 (Singleton)1.1 详细说明1.2 应用场景示例 2、工厂模式 (Factory Method)2.1 详细说明2.2 应用场景示例 3、观察者模式 (Observer)3.1 详细说明3.2 应用场景示例 4、策略模式 (Strategy)4.1 详细说明4.2 应用场景示例 5、适配器模式 (Adapter)5.1 详细…...

字符串相关函数和文件操作

文章目录 1. C/C 字符串概述1.1 字符串常量1.2 字符数组 2. 字符串函数2.1 拷贝赋值功能相关函数&#xff08;覆盖&#xff09;2.1.1 strcpy2.1.2 strncpy2.1.3 memcpy2.1.4 memmove2.1.5 memset2.1.6 注意小点2.1.7 【函数区别】 2.2 追加功能相关函数2.2.1 strcat2.2.2 strnc…...

【c++学习】数据结构中的栈

c栈 栈代码用线性表实现栈用链表实现栈 栈 栈&#xff1a;先进后出 只对栈顶元素进行操作&#xff0c;包括新元素入栈、栈顶元素出栈和查看栈顶元素&#xff08;只支持对栈顶的增、删、查&#xff09;。 代码 下述代码实现了栈及其接口 包括对栈顶的增、删、查以及查看栈的大…...

新建react项目,react-router-dom配置路由,引入antd

提示&#xff1a;reactrouter6.4版本&#xff0c;与reactrouter5.0的版本用法有区别&#xff0c;互不兼容需注意 文章目录 前言一、创建项目二、新建文件并引入react-router-dom、antd三、配置路由跳转四、效果五、遇到的问题六、参考文档总结 前言 需求&#xff1a;新建react项…...

Transformer and Pretrain Language Models3-6

Pretrain Language Models预训练语言模型 content&#xff1a; language modeling&#xff08;语言模型知识&#xff09; pre-trained langue models(PLMs&#xff09;&#xff08;预训练的模型整体的一个分类&#xff09; fine-tuning approaches GPT and BERT&#xff08;…...

Linux系统中编写bash脚本进行mysql的数据同步

一、为何要用脚本做数据同步 &#xff08;一&#xff09;、问题 我们的视频监控平台云服务器&#xff0c;需要向上级的服务器定期同步一些数据表的数据&#xff0c;前期做了个程序&#xff0c;可以实现同步。但是&#xff0c;现在数据库的结构改了&#xff0c;结果又需要该程序…...

光耦驱动继电器电路图大全

光耦驱动继电器电路图&#xff08;一&#xff09; 注&#xff1a; 1U1-1脚可接12V&#xff0c;也可接5V&#xff0c;1U1导通&#xff0c;1Q1导通&#xff0c;1Q1-30V&#xff0c;线圈两端电压为11.7V. 1U1-1脚不接或接地&#xff0c;1U1不通&#xff0c;1Q1截止&#xff0c;1…...

【AI量化分析】小明在量化中使用交叉验证原理深度分析解读

进行交叉验证好处 提高模型的泛化能力&#xff1a;通过将数据集分成多个部分并使用其中的一部分数据进行模型训练&#xff0c;然后使用另一部分数据对模型进行测试&#xff0c;可以确保模型在未见过的数据上表现良好。这样可以降低模型过拟合或欠拟合的风险&#xff0c;提高模…...

2024最新版Visual Studio Code安装使用指南

2024最新版Visual Studio Code安装使用指南 Installation and Usage Guide for the Latest Visual Studio Code in 2024 By JacksonML Visual Studio Code最新版1.85已经于2023年11月由其官网 https://code.visualstudio.com正式发布&#xff0c;这是微软公司2024年发行的的最…...

接口请求重试八种方法

请求三方接口需要加入重试机制 一、循环重试 在请求接口的代码块中加入循环&#xff0c;如果请求失败则继续请求&#xff0c;直到请求成功或达到最大重试次数。 int retryTimes 3; for(int i 0;i < retryTimes;i){try{//请求接口的代码break;}catch(Exception e){//处理…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...