【C语言进阶】指针的高级应用(上)

news2024/11/15 3:34:04

本专栏介绍:免费专栏,并且会持续更新C语言基础知识,欢迎各位订阅关注。
关注我,带你了解更多关于机器人、嵌入式、人工智能等方面的优质文章,坚持更新!
大家的支持才是更新的最强动力!

文章目录

  • 一、什么是指针?
    • 1.1 访问内存地址
    • 1.2 指针的概念及作用
  • 二、如何定义指针
    • 2.1 方式1
    • 2.2 方式2
  • 三、指针符号*的两个含义
    • 3.1 第一个含义
    • 3.2 第二个含义
  • 总结
  • 思考题

在这里插入图片描述

一、什么是指针?

1.1 访问内存地址

一样的事物出现往往先是有需求,或是改进以往不好的地方,在C语言中,指针的出现又是因为什么呢?

回顾一下,在C语言之前我们是如何访问内存地址的呢?

采用汇编指令间接访问;十六进制数直接表示地址。

而随着语言越来越高级,发展出了汇编语言以上的高等语言,首先出现的就是C语言了,因此指针的作用就是代替汇编语言中寻址指令的功能。

1.2 指针的概念及作用

如此我们引出了指针的概念:

在计算机科学中,指针(Pointer)是一种变量,又称为指针变量,它存储了一个内存地址,用于指向其他变量或数据的位置。指针可以被用来直接访问和操作内存中的数据。它提供了一种灵活而强大的方式来处理和管理数据。

以及作用:

间接访问内存地址。在汇编中都有间接访问,其实就是CPU的寻址方式中的间接寻址。

二、如何定义指针

指针变量的定义和初始化方式:

2.1 方式1

先定义后赋值:数据类型*变量名

例如:

int a=1;
int*p;#p即被定义为一个指针。
p=&a;#将a的值赋值给p

2.2 方式2

定义的同时初始化:数据类型*指针的变量 = &变量名

例如:

int*p=&a;

定义指针变量p的时候初始化。这里P前面的*理解跟定义时相同,表示p是一个指针。实际上赋值效果等同于p=&a

三、指针符号*的两个含义

例如:

int a=1;//定义变量a。

3.1 第一个含义

Int *p;

定义指针变量p,该指针指向一个整型数。这里的 *p含义不是代表指针变量p所指向的那个变量,在定义时这里的 *p只是为了告诉编译器p是一个指针而已, P=&a;&a:代表变量a的地址值。将变量a的地址赋值给p,完成“绑定”。那么此时 *p等于a的值,也就是1。

3.2 第二个含义

*p=123;

修改变量a的值。代表指针变量p所指向的那个变量,也就是变量a。即:
*p表示变量p指向跟他“绑定”的那个变量a。可以直接将 *p当作a
Printf(“a=%d”,a)在这里插入图片描述

总结

(1)指指针间接访问功能(CPU的间接寻址)是CPU设计时决定的,这个决定了汇编语言必须能够实现间接寻址,又决定了汇编之上的C语言也必须实现间接寻址。
(2)

思考题

高级语言如Java、C#等没有指针,那他们怎么实现间接访问?

答案是:语言本身帮我们封装了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解PHP反射API

PHP中的反射API就像Java中的java.lang.reflect包一样。它由一系列可以分析属性、方法和类的内置类组成。它在某些方面和对象函数相似,比如get_class_vars(),但是更加灵活,而且可以提供更多信息。反射API也可与PHP最新的面向对象特性一起工作&…

掌握 JVM 的参数及配置

点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~ JVM(Java虚拟机)是Java编程语言的核心组件之一,它负责执行Java程序,并提供一系列参数和配置选项,可以调整Java程…

探秘企业DevOps一体化平台建设终极形态丨IDCF

笔者从事为企业提供研发效能改进解决方案相关工作十几年,为国内上百家企业提供过DevOps咨询及解决方案落地解决方案,涉及行业包括:金融、通信、制造、互联网、快销等多种行业。 DevOps的核心是研发效能改进,效能的提升离不开强大…

Linux基本开发工具(一)

文章目录 Linux基本开发工具(一)Linux安装和卸载软件Linux 软件包管理器 yum关于sudo命令关于yum源的换源问题 vim编辑器的使用vim三种模式(常见)vim的基本操作vim配置 Linux基本开发工具(一) Linux安装和…

Dubbo中使用netty

技术主题 netty在Dubbo中的使用,主要集中在网络通信上, 技术原理 Dubbo是什么 高性能、轻量级的开源java的RPC框架,提供三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 Dubbo的传输结构 1、魔数标识符(四个字节),用于区分不同…

机器人开发--兴颂雷达介绍

机器人开发--兴颂雷达介绍 1 介绍2 使用手册参考 1 介绍 佛山市兴颂机器人科技有限公司(Hinson)是一家集研发、设计、生产、销售机器人(AGV)导航核心零部件、并提供整体运动控制方案的自主创新型国家高新技术企业。 2 使用手册 兴颂激光雷达使…

HDFS中的sequence file

sequence file序列化文件 介绍优缺点格式未压缩格式基于record压缩格式基于block压缩格式 介绍 sequence file是hadoop提供的一种二进制文件存储格式一条数据称之为record&#xff08;记录&#xff09;&#xff0c;底层直接以<key, value>键值对形式序列化到文件中 优…

【flink】开启savepoint

先启动一个任务 flink run -c com.yang.flink.CDCJob test-cdc.jar开启savepoint 命令&#xff1a; flink savepoint JobID 文件地址 flink savepoint e929a11d79bdc5e6f140f2cfb92e1335 file:///workspace/flinkSavepoints/backend这样就开启好了 操作中的错误 详细信…

HTTP——八、确认访问用户身份的认证

HTTP 一、何为认证二、BASIC认证BASIC认证的认证步骤 三、DIGEST认证DIGEST认证的认证步骤 四、SSL客户端认证1、SSL 客户端认证的认证步骤2、SSL 客户端认证采用双因素认证3、SSL 客户端认证必要的费用 五、基于表单认证1、认证多半为基于表单认证2、Session 管理及 Cookie 应…

【ONE·Linux || 基础IO(二)】

总言 文件系统与动静态库相关介绍。 文章目录 总言2、文件系统2.1、背景知识2.2、磁盘管理2.2.1、磁盘文件系统图2.2.2、inode与文件名 2.3、软硬链接 3、动静态库3.1、站在编写库的人的角度&#xff1a;如何写一个库&#xff1f;3.1.1、静态库制作3.1.3、动态库制作 3.2、站在…

初识MySQL数据库之用户管理

目录 一、用户管理 二、用户 1. 用户信息 2. 创建用户 3. 用户登录测试 4. 删除用户 5. 设置用户远端登录 6. 修改密码 6.1 修改当前用户的密码 6.2 root用户修改指定用户的密码 三、权限 1. 数据库中的各个权限含义 2. 给用户授权 3. 查看用户拥有权限 4. 授权…

VSCode---通过ctrl+鼠标滚动改变字体大小

打开设置然后在右边输editor.mouseWheelZoo勾选即可实现鼠标滚动改变字体大小 4.这种设置的字体大小是固定的

Wordpress升级版本后插件和主题常见出错及处理方法整理【持续更新】

Wordpress报错怎么解决&#xff1f; 一般常用的排查方法&#xff1a; 暂时禁用所有插件&#xff1b;将主题更改为默认主题&#xff1b; 修改wp-config.php文件&#xff1b;更新固定链接设置&#xff0c;确保设置正确&#xff1b;检查.htaccess文件是否存在且是否可写&#xf…

IL汇编实现两数相加输出结果

话说前面没有实现IL汇编2数相加&#xff1b;鼓捣了一下&#xff0c;实现的代码如下&#xff1b; .assembly extern mscorlib {}.assembly Test{.ver 1:0:1:0}.module test.exe.method static void main() cil managed{.maxstack 8.entrypoint.locals init (int32 V_0, int3…

数据集成、类的派生树、算子、软件核化。

数据集成、类的派生树、算子、软件核化TOC 数据集成&#xff1a;数据集成首先需要对数据进行分类、组织、排序&#xff0c;然后按照一定的规则合成、展示数据&#xff08;可以是生成式网页数据&#xff09;。对于元宇宙、大数据、大模型、基于搜索的计算、数据集成都是提高效率…

SpringBoot中Redis报错:NOAUTH Authentication required

1、问题 org.springframework.dao.InvalidDataAccessApiUsageException: NOAUTH Authentication required.; nested exception is redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required. … 2、解决 如果提供了密码还没解决&#xff0c;那可能是…

2021-06-16 Multisim74LS161S设计13进制计数器!

缘由求&#xff01;74LS161S设计13进制计数器&#xff01;-其他-CSDN问答

从URL取值传给后端

从URL传值给后端 http://127.0.0.1:8080/blog_content.html?id8点击浏览文章详情&#xff0c;跳转至详情页面 从 url 中拿出文章 id&#xff0c;传给后端 首先拿到url然后判断是否有值&#xff0c;从问号后面取值params.split(&) 以 & 作为分割然后遍历字符数组 param…

SQL分类及通用语法数据类型(超详细版)

一、SQL分类 DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML: 数据操作语言&#xff0c;用来对数据库表中的数据进行增删改DQL: 数据查询语言&#xff0c;用来查询数据库中表的记录DCL: 数据控制语言&#xff0c;用来创建数据库…

在消费级GPU调试LLM的三种方法:梯度检查点,LoRA和量化

LLM的问题就是权重参数太大&#xff0c;无法在我们本地消费级GPU上进行调试&#xff0c;所以我们将介绍3种在训练过程中减少内存消耗&#xff0c;节省大量时间的方法:梯度检查点&#xff0c;LoRA和量化。 梯度检查点 梯度检查点是一种在神经网络训练过程中使动态计算只存储最…