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

C语言指针系列1——初识指针

祛魅:其实指针这块儿并不难,有人说难只是因为基础到进阶没有处理好,大家要好好跟着一步一步学习,今天我们先来认识一下指针


指针定义:指针就是内存地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。

有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。

有些小伙伴可能问题重重,我们一句一句的解释~

 指针变量是用来存放内存地址的变量

首先,假设我们的内存长这样

以变量a为例,指针变量为p

我们发现p就和门牌号一样,指向了变量a,p就是a的地址,也是a的指针

那么如何用代码来表示呢?

这个时候就要引入进来两个符号了,& 取地址,* 解引用,下面依然以变量a为例我们来写一下代码 

#include <stdio.h>
int main() {int a = 10;int* p = &a;printf("%p\n",p);printf("%p\n", &a);return 0;
}

我们可以看到,他们的结果是一样的,都是a的地址,其中  int*  是指针变量中的int类型,而 & 符号则为取地址符号

 在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的

 我们都知道,变量类型有 int , double , float ,char , short 等

同样的,指针变量也有这些类型  int* , double* , float* ,char* , short*(PS:也可以中间空一格再打出*,如: int   *   )

那么 不同类型的指针变量所占用的存储单元长度是相同的 到底对还是不对呢,这个时候我们突然想起来 sizeof 好像可以计算字节,那么我们就可以用代码来试一试

#include <stdio.h>
int main() {printf("%zd\n", sizeof(int*));printf("%zd\n", sizeof(double*));printf("%zd\n", sizeof(float*));printf("%zd\n", sizeof(char*));printf("%zd\n", sizeof(short*));return 0;
}

我们发现无论是哪种类型,指针变量都是8个字节,这是在x64的环境下 

而在x86,也就是32位的情况下,又是几个字节呢?

这个时候我们发现在x86下则是四个字节 

这就是为什么说是 在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的

 而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同

这句话又该怎么样理解呢?

首先我们先来写个代码对比一下,这里是以 int* 和 char* 作对比

#include<stdio.h>
int main() {int n1 = 0x11223344;char* pi = (char*)&n1;*pi = 0;printf("%x\n", n1);int n2 = 0x11223344;int* pc = &n2;*pc = 0;printf("%x\n", n2);return 0;
}

我们发现他更改的字节不同,char*只能改一个字节,而int*则都改掉了

这样我们就可以理解这句话了


今天我们就先说到这里,给大家打下一个良好的基础,下次我们再一步一步来学习! 

相关文章:

C语言指针系列1——初识指针

祛魅&#xff1a;其实指针这块儿并不难&#xff0c;有人说难只是因为基础到进阶没有处理好&#xff0c;大家要好好跟着一步一步学习&#xff0c;今天我们先来认识一下指针 指针定义&#xff1a;指针就是内存地址&#xff0c;指针变量是用来存放内存地址的变量&#xff0c;在同一…...

传神论文中心|第26期人工智能领域论文推荐

在人工智能领域的快速发展中&#xff0c;我们不断看到令人振奋的技术进步和创新。近期&#xff0c;开放传神&#xff08;OpenCSG&#xff09;传神社区发现了一些值得关注的成就。传神社区本周也为对AI和大模型感兴趣的读者们提供了一些值得一读的研究工作的简要概述以及它们各自…...

NLP基础1

NLP基础1 深度学习中的NLP的特征输入 1.稠密编码&#xff08;特征嵌入&#xff09; 稠密编码&#xff08;Dense Encoding&#xff09;&#xff1a;指将离散或者高纬的稀疏数据转化为低纬度的连续、密集向量表示 特征嵌入&#xff08;Feature Embedding&#xff09; ​ 也称…...

001.docker30分钟速通版

docker简介 docker就是一个用于构建&#xff08;build&#xff09;&#xff0c;运行&#xff08;run&#xff09;&#xff0c;传送&#xff08;share&#xff09;应用程序的平台做一个不恰当的类比&#xff0c;就是外卖平台&#xff0c;如果你自己做华莱士不一定好吃&#xff0…...

Kafka 在 Linux 下的集群配置和安装

Kafka 在 Linux 下的集群配置和安装 Apache Kafka 是一个流行的分布式流处理平台&#xff0c;广泛用于实时数据管道和流处理应用。本文将详细讲解如何在 Linux 环境中配置和安装 Kafka 集群&#xff0c;并包括通过 Docker 安装和配置 Kafka 的步骤。每个步骤都将提供详细的解释…...

Python--操作列表

1.for循环 1.1 for循环的基本语法 for variable in iterable: # 执行循环体 # 这里可以是任何有效的Python代码块这里的variable是一个变量名&#xff0c;用于在每次循环迭代时临时存储iterable中的下一个元素。 iterable是一个可迭代对象&#xff0c;比如列表&#xff08;…...

JMeter(需要补充请在留言区发给我,谢谢)

一、学习工具 1、CinfigElement(HTTP Request Defaults、HTTP Header Manager、HTTP Authorization、CSV Data Set Config、User Defined Variables、JDBC Connection Configuration、HTTP Cookie Manager、Random Variable) 二、协议 1、HTTP协议&#xff08;消息体数据&am…...

线程池的执行流程和配置参数总结

一、线程池的执行流程总结 提交线程任务&#xff1b;如果线程池中存在空闲线程&#xff0c;则分配一个空闲线程给任务&#xff0c;执行线程任务&#xff1b;线程池中不存在空闲线程&#xff0c;则线程池会判断当前线程数是否超过核心线程数&#xff08;corePoolSize&#xff09…...

node-red-L3-重启指定端口的 node-red

重启指定端口 目的步骤查找正在运行的Node.js服务的进程ID&#xff08;PID&#xff09;&#xff1a;停止Node.js服务&#xff1a;启动Node.js服务&#xff1a; 目的 重启指定端口的 node-red 步骤 在Linux系统中&#xff0c;如果你想要重启一个正在运行的Node.js服务&#x…...

(done) 使用泰勒展开证明欧拉公式

问问神奇的 GPT&#xff0c;how to prove euler formula? 一个答案如下&#xff1a;...

红队apt--邮件钓鱼

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 免责声明: 本文仅供了解攻击方手法使用&#xff0c;切勿用于非授权情节 初步了解邮件基础 用途方面 这个我们应该比较熟悉&#xff0c;最常用于验证码接收&#xff0c;也有一些厂商会用这个来打广告&#xff0c;…...

十七,Spring Boot 整合 MyBatis 的详细步骤(两种方式)

十七&#xff0c;Spring Boot 整合 MyBatis 的详细步骤(两种方式) 文章目录 十七&#xff0c;Spring Boot 整合 MyBatis 的详细步骤(两种方式)1. Spring Boot 配置 MyBatis 的详细步骤2. 最后&#xff1a; MyBatis 的官方文档&#xff1a;https://mybatis.p2hp.com/ 关于 MyBa…...

DNS协议解析

DNS协议解析 什么是DNS协议 IP地址&#xff1a;一长串唯一标识网络上的计算机的数字 域名&#xff1a;一串由点分割的字符串名字 网址包含了域名 DNS&#xff1a;域名解析协议 IP>域名 --反向解析 域名>IP --正向解析 域名 由ICANN管理&#xff0c;有级别&#xf…...

每日一题——第一百零八题

题目&#xff1a; 写几个函数&#xff0c; ①输入10个职工的姓名和职工号 ②按照职工号由小到大排列&#xff0c; 姓名顺序也随之调整 ③要求输入一个职工号&#xff0c; 用折半查找找出该职工的姓名 #include<stdio.h> #include<string.h> #define MAX_EMPOLYEES…...

使用Python免费将pdf转为docx

刚刚想将pdf转换为docx文档时&#xff0c;居然要收费 还好我学过编程&#xff0c;这不得露两手 将pdf 转换为 docx 文档 的操作步骤 我这里使用的是Python语言 &#xff08;1&#xff09;在终端上安装 pdf2docx 是一个 Python 库&#xff0c;它可以将 PDF 文件转换为 Word (…...

树莓派4B+UBUNTU20.04+静态ip+ssh配置

树莓派4B+UBUNTU20.04+静态ip+ssh配置 1.烧录Ubuntu镜像1.1选择pi 4b1.2选择ubuntu server (服务器版,无桌面)20.041.3选择sd卡1.4 点击右下角 NEXT ,编辑设置,输入密码,wifi选CN, 开启ssh1.5 烧录,依次点击“是”,等待完成2 烧录完成后装入树莓派,上电,等待系统完成配…...

C#实现指南:将文件夹与exe合并为一个exe

在软件开发过程中&#xff0c;有时需要将多个文件&#xff08;如资源文件、配置文件等&#xff09;与可执行文件&#xff08;exe&#xff09;打包在一起&#xff0c;以便于分发和部署。在C#中&#xff0c;我们可以利用ILMerge或Costura.Fody等工具来实现这一目标。本文将介绍如…...

linux信号 | 学习信号三步走 | 全解析信号的产生方式

前言&#xff1a;本节内容是信号&#xff0c; 主要讲解的是信号的产生。信号的产生是我们学习信号的第二个阶段。 我们已经学习过第一个阶段——信号的概念与预备知识&#xff08;没有学过的友友可以查看我的前一篇文章&#xff09;。 以及我们还没有学习信号的第三个阶段——信…...

C++ 刷题 使用到的一些有用的容器和函数

优先队列 c优先队列priority_queue&#xff08;自定义比较函数&#xff09;_c优先队列自定义比较-CSDN博客 373. 查找和最小的 K 对数字 - 力扣&#xff08;LeetCode&#xff09; 官方题解&#xff1a; class Solution { public:vector<vector<int>> kSmallestP…...

【Kubernetes】常见面试题汇总(三十四)

目录 86. K8s 每个 Pod 中有一个特殊的 Pause 容器能否去除&#xff0c;简述原因。 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xff09;” 。 题目 69-113 属于【Kuberne…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析

1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器&#xff08;TI&#xff09;推出的一款 汽车级同步降压转换器&#xff08;DC-DC开关稳压器&#xff09;&#xff0c;属于高性能电源管理芯片。核心特性包括&#xff1a; 输入电压范围&#xff1a;2.95V–6V&#xff0c;输…...