指针,指针变量,引用,取地址符,malloce()函数使用,C中“—>” 和“ . ” 作用与区别

目录

一:指针,指针变量,引用,取地址符:

前提 :

1.“ * ” 的两种用途

2." & “的两种用途

2.1:引用

2.2:取地址

补充:

二 : malloc(),动态申请地址空间

1.原型定义 void *malloc(int size);

补充:

三:—> 和 . 作用 区别

1.作用:

2.理解:


一:指针,指针变量,引用,取地址符:

  • 符号“ * ” 和 指针变量

  • int *p; #这个代码的含义是: 创建一个指针变量:p, p是一个指针变量,而p前面的 “ * ” 是在声明p是一个指针变量

  • *p ; #这个代码的含义是:解引用 指针变量p (取出指针变量所存的地址中的内容)

  • int &q; #这个代码的含义是: 创建一个地址变量:q, q是一个地址变量,而q前面的 “ & ” 是在声明q是一个地址变量

  • &q; #这个代码的含义是:取地址, 取出变量q的地址 (取出指针变量所存的地址中的内容)

前提

  • int e = 10;

  • int a = 5;

1.“ * ” 的两种用途

  • 1.1:解引用:返回指针所指对象的值

  • 使用场景: 想要修改指针变量指向地址内容的值时,使用解引用

  • int *p=&a;

  • *p = 50; //此处相当于将 a中内容修改成50;

  • 1.2:声明指针变量:表面该变量是指针变量

  • 场景一:

  • int *p;

  • 场景二:在形参声明指针

  • void test1(int* q) {

  • }

  • void main1(){

  • test1(p) ;

  • }

  • 当main函数调用test函数时,test1函数空间会开辟一块新的内存空间,并且创建一个指针变量q,并且将p指针的内容 存放到q指针中(p,q是单独存在的两个指针,知识他们存储的内容是一样的;)

2." & “的两种用途

2.1:引用
  • 场景一:声明引用变量

  • int &r = a; #将r 作为a的别名 和 a 一样(但是不能修改引用)

  • 例如 r = 6 : #实质是 先将 a修改成6 然后r的引用也变为6

  • 场景二:函数形参声明 引用变量

  • void test2(参数类型 &y)

  • void main(){

  • test(a); // 相当于 将y作为a的别名,当在test2中 修改y时,实质上的操作是:先修改了a,然后同时 y 的引用也指向 新的 a。

  • }

  • 场景三:指针类型 和 引用 同时出现在形参位置

  • void test2(参数类型* &y) //此处表示,一个指针变量y ,将会成为 调用test2 时,传递过来参数的引用

  • void main(){

  • int *p=&a;//声明一个指针变量p,并且将 a的地址赋给p;

  • test2(p);

  • }

  • 当main函数调用test函数时,test1函数空间会开辟一块新的内存空间,并且创建一个指针变量y,此时指针变量y 和 p 是同一个指针,q是p的别名(引用))

2.2:取地址
  • p = &a;

  • int *q = &a;

  • q = &e;//取出e的地址 赋值给指针变量q

  • printf(“%d”,*q);

  • // 10

  • 上述操作 当输出*p 结果应该是 e,但这并不意味着修改了 变量a ,这只是仅仅将指针变量p内的存储内容从a的地址改为e的地址

补充

1: int* p,q; 和 int *p,q; //表达相同含义 等价 int *p;int q;

2.二级指针:int "* *p" ; //表示 p是一个二级指针,p存储的是一个一级指针的地址

“ * * p ” //表示 二级解引用,**p 的值 是 p内存储一级指针所存储的地址内存储的数

举例: int a = 5;

int *p = &a;

int **q = &p;

print(q)

// 输出p的地址

print(*q)

//输出a的地址

print(**q)

//输出 a

二 : malloc(),动态申请地址空间

1.原型定义 void *malloc(int size);

malloc()使用 : (数据类型*)malloc(sizeof(数据类型)*申请数据数量)

malloc()返回值: malloc()返回开辟出内存空间的首地址

补充:

1.由malloc定义,其返回对象是指针类型,只能被指针变量接收

2.malloc申请空间使用完成后 需要free(),且free收到参数必须是调用malloc()时 malloc返回的地址空间首地址;

三:—> 和 . 作用 区别

1.作用:

  • A.B 则 A为对象或者结构体; 点号(.):左边必须为实体。

  • A->B则A为指针,->是成员提取,A->B是提取(*A)中的成员B,A只能是指向类、结构、联合的指针; 箭头(->):左边必须为指针;

    补充:联合体(union) 参考文章:C 语言中的结构体和共用体(联合体) | 彬彬的博客 (kangzubin.com) 中第二部分

    img

2.理解:

s.member 等价于 (&s)->member (*p).member 即是 p->member (p->member 等价于(*p).member )

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

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

相关文章

Dubbo生态之初识dubbo协议

1.RPC框架 在java的发展中,随着业务的越来越庞大,单体架构的工作繁琐且耦合度高,因此单体架构过渡到了分布式架构,而分布式架构就必然涉及到各个服务之间的远程通信(RPC框架),RPC框架如图所示: 工作流程: a.客户端调…

查看当前Shell系统环境变量

查看当前Shell系统环境变量 查看命令 env效果 查看Shell变量(系统环境变量自定义变量函数) 命令 set效果 常用系统环境变量 变量名称含义PATH与windows环境变量PATH功能一样,设置命令的搜索路径,以冒号为分割HOME当前用户主目录:/rootSH…

有道:一季度业绩超市场预期,生成式AI商业化落地进程加快

5月23日,教育科技公司网易有道(NYSE:DAO)公布了2024年第一季度未经审计的财务报告。报告期内,受益于“AI”加“教育”双轮驱动,业绩表现超市场预期,业务健康度大幅改善。 财报显示,…

5.23小结

1.java项目创新 目前想添加一个自动回复的功能和设置验证方式有(允许任何人添加,禁止添加,设置回答问题添加,普通验证添加) 目前只完成画好前端界面,前端发送请求,还有表的修改 因为涉及表字…

大语言模型量化方法对比:GPTQ、GGUF、AWQ 包括显存和速度

GPTQ: Post-Training Quantization for GPT Models GPTQ是一种4位量化的训练后量化(PTQ)方法,主要关注GPU推理和性能。 该方法背后的思想是,尝试通过最小化该权重的均方误差将所有权重压缩到4位。在推理过程中,它将动态地将其权重去量化为f…

决策树最优属性选择

本文以西瓜数据集为例演示决策树使用信息增益选择最优划分属性的过程 西瓜数据集下载:传送门 首先计算根节点的信息熵: 数据集分为好瓜、坏瓜,所以|y|2根结点包含17个训练样例,其中好瓜共计8个样例,所占比例为8/17坏…

2024-5-4-从0到1手写配置中心Config之基于h2的config-server

添加依赖 新建的web工程中添加h2的依赖 添加h2的配置 设置数据源和密码设置初始化sql语句打开h2的控制台 初始化语句创建一个config表,保存服务配置信息。 完成CRUD接口 controller类 mapper接口 测试 在web控制台可以看到sql已经初始化完成,crud接口…

PLC工程师按这个等级划分是否靠谱?

在工业自动化领域,PLC工程师扮演着至关重要的角色,他们负责构建、维护自动化系统,推动工业4.0进程的发展。成为一名优秀的PLC工程师需要经历不同境界的发展阶段,每个阶段都对应着不同的技能要求和责任。以下是PLC工程师的六种级别…

[STM32-HAL库]AS608-指纹识别模块-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C8T6

目录 一、前言 二、详细步骤 1.光学指纹模块 2.配置STM32CUBEMX 3.程序设计 3.1 输出重定向 3.2 导入AS608库 3.3 更改端口宏定义 3.4 添加中断处理部分 3.5 初始化AS608 3.6 函数总览 3.7 录入指纹 3.8 验证指纹 3.9 删除指纹 3.10 清空指纹库 三、总结及资源 一、前言 …

Day37 贪心算法part04

LC860柠檬水找零(未掌握) 未掌握分析:20的时候找零卡住,同时贪心思路就想了很久 当bill[i]20的时候,我们有两种找零范式,找零10、5和找零三个5,优先找零10、5,因为三个5是可以替代10、5的情况的&#xff0…

Nebula街机模拟器 Mac移植版(400+游戏roms)汉化版

nebula星云模拟器是电脑上最热门的街机游戏模拟器之一,玩家可以通过这个小巧的模拟器软件进行多款经典街机游戏启动和畅玩,本次移植的包含400多款游戏roms,经典的三国志、三国战纪、拳皇、街霸、合金弹头、1941都包含在内。 下载地址&#xf…

前端 CSS 经典:好看的标题动画

前言&#xff1a;好看的标题动画实现。 效果&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><…

蓝桥楼赛第30期-Python-第三天赛题 从参数中提取信息题解

楼赛 第30期 Python 模块大比拼 提取用户输入信息 介绍 正则表达式&#xff08;英文为 Regular Expression&#xff0c;常简写为regex、regexp 或 RE&#xff09;&#xff0c;也叫规则表达式、正规表达式&#xff0c;是计算机科学的一个概念。 所谓“正则”&#xff0c;可以…

【Linux取经路】初识线程——线程控制

文章目录 一、什么是线程&#xff1f;1.1 Linux 中线程该如何理解&#xff1f;1.2 如何理解把资源分配给线程&#xff1f;1.2.1 虚拟地址到物理地址的转换 1.3 线程 VS 进程1.3.1 线程为什么比进程更轻量化&#xff1f;1.3.2 线程的优点1.3.3 线程缺点1.3.4 线程异常1.3.5 线程…

关于基础的流量分析(1)

1.对于流量分析基本认识 1&#xff09;简介&#xff1a;网络流量分析是指捕捉网络中流动的数据包&#xff0c;并通过查看包内部数据以及进行相关的协议、流量分析、统计等来发现网络运行过程中出现的问题。 2&#xff09;在我们平时的考核和CTF比赛中&#xff0c;基本每次都有…

MySQL用户管理操作

用户权限管理操作 DCL语句 一.用户管理操作 MySQL软件内部完整的用户格式&#xff1a; 用户名客户端地址 admin1.1.1.1这个用户只能从1.1.1.1的客服端来连接服务器 admin1.1.1.2这个用户只能从1.1.1.2的客服端来连接服务器 rootlocal host这个用户只能从服务器本地进行连…

ACM实训

【碎碎念】继续搞习题学习&#xff0c;今天完成第四套的ABCD&#xff0c;为下一周挤出时间复习&#xff0c;加油 Digit Counting 问题 法希姆喜欢解决数学问题。但有时解决所有的数学问题对他来说是一个挑战。所以有时候他会为了解决数学难题而生气。他拿起一支粉笔&#xff…

Java面试八股之进程和线程的区别

Java进程和线程的区别 定义与作用&#xff1a; 进程&#xff1a;在操作系统中&#xff0c;进程是程序执行的一个实例&#xff0c;是资源分配的最小单位。每个进程都拥有独立的内存空间&#xff0c;包括代码段、数据段、堆空间和栈空间&#xff0c;以及操作系统分配的其他资源…

工厂模式(简单工厂模式+工厂模式)

工厂模式的目的就是将对象的创建过程隐藏起来&#xff0c;从而达到很高的灵活性&#xff0c;工厂模式分为三类&#xff1a; 简单工厂模式工厂方法模式抽象工厂模式 在没有工厂模式的时候就是&#xff0c;客户需要一辆马车&#xff0c;需要客户亲自去创建一辆马车&#xff0c;…

经验分享:C++ error:‘syscall’ was not declared in this scope

明明已经加了头文件 #include <sys/syscall.h>#define gettid() syscall(__NR_gettid)但是依旧不能使用 syscall() 函数&#xff0c; 检查源码后&#xff1a; sys/syscall.h 内部表示&#xff0c;他封装了 打开对应的 syscall.h 文件内部依旧没有 syscall()函数的声明…