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 = XiaoMi

addr(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 = XiaoMi

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

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

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

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

相关文章

计算机网络:体系结构知识点汇总

文章目录 一、计算机网络概述1.1概念及功能1.2组成和分类1.3性能指标 二、体系结构与参考模型2.1分层结构、协议、接口、服务2.2OSI参考模型2.3TCP/IP参考模型 一、计算机网络概述 1.1概念及功能 计算机网络就是通过各个节点&#xff0c;这个节点包括终端的电脑&#xff0c;手…

opencv#32 可分离滤波

滤波的可分离性 就是将一个线性滤波变成多个线性滤波&#xff0c;这里面具体所指的是变成x方向的线性滤波和y方向的线性滤波。无论先做x方向的滤波还是y方向滤波&#xff0c;两者的叠加结果是一致的&#xff0c;这个性质取决于滤波操作是并行的&#xff0c;也就是每一个图像在滤…

研发日记,Matlab/Simulink避坑指南(六)——字节分割Bug

文章目录 前言 背景介绍 问题描述 分析排查 解决方案 总结归纳 前言 见《研发日记&#xff0c;Matlab/Simulink避坑指南&#xff08;一&#xff09;——Data Store Memory模块执行时序Bug》 见《研发日记&#xff0c;Matlab/Simulink避坑指南(二)——非对称数据溢出Bug》…

文旅项目包括什么?

文旅项目是指与文化和旅游相结合的项目&#xff0c;旨在通过提供丰富的文化体验和旅游服务来吸引游客&#xff0c;促进地方经济发展。 文旅项目通常包括多个方面&#xff0c;以下是对每块内容的详细介绍&#xff1a; 文化旅游景区&#xff1a;这类项目以展示人类文化和历史遗产…

单片机学习笔记---独立按键控制LED显示二进制

这节我们来实现独立按键的第三个功能&#xff0c;独立按键控制LED显示二进制 新创建一个工程文件&#xff0c;然后上来我们就要把基本框架写好&#xff0c;这是基本的习惯 老规矩&#xff0c;然后把Delay 1ms的代码复制过来 复制过来后改造一下&#xff1a; 把1ms删掉&#x…

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

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

03 SB实战 -微头条之首页门户模块(跳转某页面自动展示所有信息+根据hid查询文章全文并用乐观锁修改阅读量)

1.1 自动展示所有信息 需求描述: 进入新闻首页portal/findAllType, 自动返回所有栏目名称和id 接口描述 url地址&#xff1a;portal/findAllTypes 请求方式&#xff1a;get 请求参数&#xff1a;无 响应数据&#xff1a; 成功 {"code":"200","mes…

最新多功能PHP图床源码 /兰空图床Lsky Pro开源版v2.1/ 单纯的图床程序源码

源码介绍&#xff1a; Lsky Pro 是一个用于在线上传、管理图片的图床程序&#xff0c;中文名&#xff1a;兰空图床&#xff0c;你可以将它作为自己的云上相册&#xff0c;亦可以当作你的写作贴图库。 该程序的最初版本诞生于2017年10月&#xff0c;由ThinkPHP 5框架精心打造而…

20240127使用ffmpeg合并音轨和视频通道为mp4

20240127使用ffmpeg合并音轨和视频通道为mp4 2024/1/27 11:11 百度&#xff1a;ffmpeg 合并 音频和视频 mp4 ffmpeg -i 视频文件名.mp4 -i 音频文件名.mp3 -c:v copy -c:a aac -strict experimental 输出文件名.mp4ffmpeg -i "videoplayback (1).mp4" -i videoplay…

vue项目中使用Element多个Form表单同时验证

一、项目需求 在项目中一个页面中需要实现多个Form表单&#xff0c;并在页面提交时需要对多个Form表单进行校验&#xff0c;多个表单都校验成功时才能提交。 二、实现效果 三、多个表单验证 注意项&#xff1a;多个form表单&#xff0c;每个表单上都设置单独的model和ref&am…

Python tkinter (6) Listbox

Python的标准Tk GUI工具包的接口 tkinter系列文章 python tkinter窗口简单实现 Python tkinter (1) —— Label标签 Python tkinter (2) —— Button标签 Python tkinter (3) —— Entry标签 Python tkinter (4) —— Text控件 GUI 目录 Listbox 创建listbox 添加元素…

51-16 FusionAD 用于自动驾驶预测与规划任务的多模态融合论文精读

今天要分享的是基于BEV的多模态、多任务、端到端自动驾驶模型FusionAD&#xff0c;其专注于自动驾驶预测和规划任务。这项工作首次发表于2023年8月2日&#xff0c;性能超越了2023 CVPR最佳论文UniAD模型。论文题目是FusionAD: Multi-modality Fusion for Prediction and Planni…

【Java 数据结构】LinkedList与链表

LinkedList与链表 1. ArrayList的缺陷2. 链表2.1 链表的概念及结构2.2 链表的实现 3. LinkedList的模拟实现4.LinkedList的使用4.1 什么是LinkedList4.2LinkedList的使用 5. ArrayList和LinkedList的区别 1. ArrayList的缺陷 上节课已经熟悉了ArrayList的使用&#xff0c;并且…

vue3+elementPlus pc和小程序ai聊天文生图

websocket封装可以看上一篇文章 //pc端 <template><div class"common-layout theme-white"><el-container><el-aside><div class"title-box"><span>AI Chat</span></div><div class"chat-list&…

VMware安装RHEL-磁盘划分和分区

本文探讨了在VMware虚拟机上安装RHEL时遇到的磁盘划分和分区问题。文章详细介绍了磁盘划分过程中可能出现的问题&#xff0c;特别是在选择磁盘类型时可能导致找不到磁盘的情况。通过清晰的步骤和解决方法&#xff0c;读者可以更好地理解如何正确进行磁盘划分以及如何解决磁盘无…

银行数据仓库体系实践(3)--数据架构

狭义的数据仓库数据架构用来特指数据分布&#xff0c;广义的数据仓库数据架构还包括数据模型、数据标准和数据治理。即包含相对静态部分如元数据、业务对象数据模型、主数据、共享数据&#xff0c;也包含相对动态部分如数据流转、ETL、整合、访问应用和数据全生命周期管控治理。…

AWS 专题学习 P12 (CloudWatch、CloudTrail、AWS Config)

文章目录 专题总览1. CloudWatch1.1 Amazon CloudWatch Metrics1.2 CloudWatch Metric Streams1.3 CloudWatch LogsCloudWatch Logs - SourcesCloudWatch Logs Metric Filter & InsightsCloudWatch Logs – S3 ExportCloudWatch Logs SubscriptionsCloudWatch Logs Aggrega…

jetson-inference----训练自己的目标检测模型(一)

系列文章目录 jetson-inference入门 jetson-inference----docker内运行分类任务 jetson-inference----训练自己的目标检测模型&#xff08;一&#xff09; 文章目录 系列文章目录前言一、jetson-inference docker环境介绍二、SSD目标检测三、训练自己的目标检测模型总结 前言 …

自动驾驶的决策层逻辑

作者 / 阿宝 编辑 / 阿宝 出品 / 阿宝1990 自动驾驶意味着决策责任方的转移 我国2020至2025年将会是向高级自动驾驶跨越的关键5年。自动驾驶等级提高意味着对驾驶员参与度的需求降低&#xff0c;以L3级别为界&#xff0c;低级别自动驾驶环境监测主体和决策责任方仍保留于驾驶…

淘宝扭蛋机小程序:新时代的互动营销与娱乐体验

随着科技的快速发展&#xff0c;小程序已经成为人们日常生活中不可或缺的一部分。在众多的小程序中&#xff0c;淘宝扭蛋机小程序以其独特的互动性和趣味性&#xff0c;吸引了大量用户。本文将深入探讨淘宝扭蛋机小程序的特色、用户体验以及未来发展。 一、淘宝扭蛋机小程序的…