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指向的是同一个地址,所以改变他们其中一个的内容,则他们所有的内容都改变了。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源】基于JAVA语言的实验室耗材管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗材出库模块2.4 耗材申请模块2.5 耗材审核模块 三、系统展示四、核心代码4.1 查询耗材品类4.2 查询资产出库清单4.3 资产出库4.4 查询入库单4.5 资产入库 五、免责说明 一、摘要 1.1…

带【科技感】的Echarts 图表

Echarts脚本在线地址 https://cdn.jsdelivr.net/npm/echarts5.4.3/dist/echarts.min.js 引入Echarts 脚本后粘贴代码 vue2 代码&#xff1a; <template><div><div ref"col-2-row-2" class"col-2-row-2"></div></div> <…

机器学习笔记:地理加权回归(GWR)

1 传统的线性回归 机器学习笔记&#xff1a;线性回归_线性回归的读书笔记-CSDN博客 最优的β为&#xff1a; 2 地理加权回归&#xff08;GWR&#xff09; 2.1 模型概述 地理加权回归&#xff08;Geographically Weighted Regression&#xff0c;GWR&#xff09;是传统回归分…

【GPU】CUDA是什么?以及学习路线图!

什么是CUDA 作者&#xff1a;Keepin 1、cuda是英伟达开发的一套应用软件接口&#xff08;API&#xff09;。其主要应用于英伟达GPU显卡的调用。 2、云计算可以简单的理解为是通过网络组合成的计算机集群&#xff0c;用于各种加速&#xff0c;其中以CPU为主&#xff0c;GPU为辅…

Spring-AOP

1.概念 AOP(Aspect Oriented Programming)&#xff0c;意为“面向切片编程”&#xff0c;是Spring中一个重要的内容&#xff0c;其本质是动态代理&#xff0c;通过加入切片的方式&#xff0c;降低了各个业务逻辑之间的耦合度&#xff0c;让原生代码更加具有专一性 画个图方便理…

线性表--栈

1.什么是栈&#xff1f; 栈是一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除 操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出的原则。 压栈&#xff1a;栈的插入操作叫做进栈/压栈/入栈&#xff…

智能AI系统开发,专业软件硬件物联网开发公司,探索未来科技新纪元

在信息时代&#xff0c;人工智能&#xff08;AI&#xff09;、物联网等前沿技术日益受到人们的关注。智能AI系统、专业软件硬件物联网开发公司应运而生。今天&#xff0c;我们将向大家介绍一家位于XX城的专业公司&#xff0c;致力于智能AI系统开发和软件硬件物联网领域的创新研…

华清远见作业第三十二天——C++(第一天)

思维导图&#xff1a; 提示并输入一个字符串&#xff0c;统计字符中大写、小写个数、空格个数以及其他字符个数要求使用C风格完成。 代码&#xff1a; #include <iostream> #include<array> using namespace std;int main() {string str;cout << "请输…

用大模型训练实体机器人,谷歌推出机器人代理模型

谷歌DeepMind的研究人员推出了一款&#xff0c;通过视觉语言模型进行场景理解&#xff0c;并使用大语言模型来发出指令控制实体机器人的模型——AutoRT AutoRT可有效地推理自主权和安全性&#xff0c;并扩大实体机器人学习的数据收集规模。在实验中&#xff0c;AutoRT指导超过…

K8s 安装部署-Master和Minion(Node)文档

K8s 安装部署-Master和Minion(Node)文档 操作系统版本&#xff1a;CentOS 7.4 Master &#xff1a;172.20.26.167 Minion-1&#xff1a;172.20.26.198 Minion-2&#xff1a;172.20.26.210&#xff08;后增加节点&#xff09; ETCD&#xff1a;172.20.27.218 先安装部署ETC…

pytorch 实现中文文本分类

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客&#x1f366; 参考文章&#xff1a;365天深度学习训练营&#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制]\n&#x1f680; 文章来源&#xff1a;[K同学的学习圈子](https://www.yuque.com/mi…

WPF自定义圆形百分比进度条

先看效果图 1.界面代码 <UserControl x:Class"LensAgingTest.CycleProcessBar1"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc"http://schemas.op…

Java研学-代理模式

一 概述 1 分类 静态代理&#xff1a;在程序运行前就已经存在代理类的字节码文件&#xff0c;代理对象和真实对象的关系在运行前就确定了。&#xff08;代理类及对象要自行创建&#xff09;   动态代理&#xff1a;代理类是在程序运行期间由 JVM 通过反射等机制动态的生成的…

朴素贝叶斯分类算法

1.分类算法 分类算法是有监督学习的一个核心问题&#xff0c;他从数据中学习一个分类决策函数或分类模型&#xff0c;对新的输入进行预测&#xff0c;输出变量取有限个离散值。 &#x1f30d;分类算法的内容是要求给定特征&#xff0c;让我们得出类别。 那么如何由指定特征&…

Asp.Net Core 获取应用程序相关目录

在ASP.NET Core中&#xff0c;可以通过以下三种方式获取应用程序所在目录&#xff1a; 1、使用AppContext.BaseDirectory属性&#xff1a; string appDirectory AppContext.BaseDirectory; 例如&#xff1a;D:\后端项目\testCore\test.WebApi\bin\Debug\net6.0\ 2、使用…

Leetcode刷题笔记题解(C++):LCR 153. 二叉树中和为目标值的路径

思路&#xff1a;利用回溯的思想&#xff0c;回溯的退出条件为当前节点为空&#xff0c;是符合路径的判断条件为路径和为目标值且叶子节点包含了&#xff0c;代码如下&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *…

【C++】入门基础

前言&#xff1a;C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许多有用的库&#xff0c;以及编程范式等。熟悉C语言之后&#xff0c;对C学习有一定的帮助&#xff0c;因此从今天开始们将进入&#xff23;的学习。 &#x1f496; 博主CSDN主页:…

《动手学深度学习(PyTorch版)》笔记4.5

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过。…

ES文档索引、查询、分片、文档评分和分析器技术原理

技术原理 索引文档 索引文档分为单个文档和多个文档。 单个文档 新建单个文档所需要的步骤顺序&#xff1a; 客户端向 Node 1 发送新建、索引或者删除请求。节点使用文档的 _id 确定文档属于分片 0 。请求会被转发到 Node 3&#xff0c;因为分片 0 的主分片目前被分配在 …

微信小程序(十七)自定义组件生命周期(根据状态栏自适配)

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.获取手机状态栏的高度 2.验证attached可以修改数据 3.动态绑定样式数值 源码&#xff1a; myNav.js Component({lifetimes:{//相当于vue的created,因为无法更新数据被打入冷宫created(){},//相当于vue的mount…