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.hqwc.cn/news/433522.html

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

相关文章

分布式因果推断在美团履约平台的探索与实践

美团履约平台技术部在因果推断领域持续的探索和实践中&#xff0c;自研了一系列分布式的工具。本文重点介绍了分布式因果树算法的实现&#xff0c;并系统地阐述如何设计实现一种分布式因果树算法&#xff0c;以及因果效应评估方面qini_curve/qini_score的不足与应对技巧。希望能…

Discuz论坛搭建:Linux宝塔面板一键部署,固定地址畅享公网访问

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 安装基础环境二. 一键部署Discuz三. 安装cpolar工具四. 配置域名访问Discuz…

ST-Link调试器:功能、用途和引脚

ST-Link调试器&#xff1a;功能、用途和引脚 介绍 在嵌入式系统开发中&#xff0c;调试器是一种至关重要的工具&#xff0c;它允许开发人员调试和编程微控制器&#xff0c;以确保系统正常运行并解决潜在的问题。ST-Link是STMicroelectronics公司推出的一款强大的调试器&#x…

【JaveWeb教程】(30)SpringBootWeb案例之《智能学习辅助系统》的详细实现步骤与代码示例(3)员工管理的实现

目录 SpringBootWeb案例033. 员工管理3.1 分页查询3.1.1 基础分页3.1.1.1 需求分析3.1.1.2 接口文档3.1.1.3 思路分析3.1.1.4 功能开发3.1.1.5 功能测试3.1.1.6 前后端联调 3.1.2 分页插件3.1.2.1 介绍3.1.2.2 代码实现3.1.2.3 测试 3.2 分页查询(带条件)3.2.1 需求3.2.2 思路分…

学习PyQt5

1、布局之后&#xff0c;无法移动对象到指定区域&#xff0c;无法改变对象大小。 原因&#xff1a;因为CtrlA选中了整个窗口&#xff0c;然后布局的时候就相当于整个窗口都按照这种布局&#xff0c;如选了水平布局&#xff0c;按钮一直在中间&#xff0c;无法拖到其它位置。 解…

华为三层交换机之基本操作

Telnet简介 Telnet是一个应用层协议,可以在Internet上或局域网上使用。它提供了基于文本的远程终端接口&#xff0c;允许用户在本地计算机上登录到远程计算机&#xff0c;然后像在本地计算机上一样使用远程计算机的资源。Telnet客户端和服务器之间的通信是通过Telnet协议进行的…

JDBC学习笔记

一.什么是JDBC 我们操作数据库是用sql语句&#xff0c;那么怎么编写程序来操作数据库呢&#xff1f;这就要学习JDBC。 JDBC就是使用Java中操作关系型数据库的一套API。全称&#xff1a;( Java DataBase Connectivity ) Java 数据库连接。 JDBC更准确的来说是一套接口/API&…

Vue2:通过代理服务器解决跨域问题

一、场景描述 现在的项目大多数是前后端分离的。Vue前端项目通过ajax去请求后端接口的时候&#xff0c;会有同源策略的限制。从而产生跨域问题。 二、基本概念 1、什么是同源策略&#xff1f; 就是前端服务和后端服务的协议名&#xff0c;IP或主机名&#xff0c;端口号不完…

牛客小白月赛85 E.烙饼

主要是学一下它的这个构造方法&#xff5e;看题不仔细 直接脑瘫 #include<bits/stdc.h> using namespace std; using ll long long; const int N 1e510; ll a[N],b[N]; ll n,m; ll sum; ll ans;priority_queue<pair<ll,ll>,vector<pair<ll,ll>>,g…

助力公益事业,吉林长春市第二社会福利院与清雷科技达成合作

“通过部署清雷科技智慧康养大屏和毫米波雷达监测设备&#xff0c;可以实时查看全院入住人员的生命体征情况&#xff0c;包括呼吸、心率、在离床状态、睡眠报告等&#xff0c;对呼吸异常、跌倒风险异常的人员还会特别标注提醒&#xff0c;提高护理员工作效率的同时&#xff0c;…

近20k stars,GSYVideoPlayer一款优秀的视频播放器

近20k stars&#xff0c;GSYVideoPlayer一款优秀的视频播放器 引言 在现代社会中&#xff0c;视频已经成为人们获取信息和娱乐的重要形式。为了提供更好的观看体验&#xff0c;开发一款优秀的视频播放器变得至关重要。而GSYVideoPlayer作为一款功能强大、稳定可靠的视频播放器…

【iOS ARKit】同时开启前后摄像头BlendShapes

在上一节中已经了解了 iOS ARkit 进行BlendShapes的基本操作&#xff0c;这一小节继续实践同时开启前后摄像头进行人脸捕捉和世界追踪。 iOS设备配备了前后两个摄像头&#xff0c;在运行AR 应用时&#xff0c;需要选择使用哪个摄像头作为图像输人。最常见的AR 体验使用设备后置…