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

news2024/12/24 21:21:06

目录

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

前提 :

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.coloradmin.cn/o/1684832.html

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

相关文章

IEEE Transactions on Neural Networks and Learning Systems神经网络和学习系统TNNLS论文投稿须知

一、TNNLS介绍 IEEE Transactions on Neural Networks and Learning Systems作为控制领域的TOP期刊,2024年5月影响因子为10.4,虽然有些下降,之前五年平均影响因子为11.2,但依然是该领域王牌期刊,接收关于神经网络和相…

Python踩坑系列之使用redis报错:module ‘redis‘ has no attribute ‘Redis‘问题

一步一步往后看哦!!! 纳尼,大伙看看这是什么情况,都是这么写的呢,为啥我这就报错了0.0 出现问题不可怕,解决它就完事了。 方法一、安装redis重新运行程序 pip install redis 无果&#xff0…

【kubernetes】探索k8s集群中kubectl的陈述式资源管理

目录 一、k8s集群资源管理方式分类 1.1陈述式资源管理方式:增删查比较方便,但是改非常不方便 1.2声明式资源管理方式:yaml文件管理 二、陈述式资源管理方法 2.1查看版本信息 2.2查看资源对象简写 2.3配置kubectl自动补全 2.4node节点…

10 - 核心对象 Switch / case

简介 在Kettle(也称为Pentaho Data Integration,PDI)中,Switch/Case 是一个关键的组件,用于根据特定条件将数据流分支到不同的路径。Switch组件评估输入数据中的某个字段,并将数据标记后传递给相应的Case组…

一款数字化管理平台源码:云MES系统(附架构图、流程)技术架构:springboot + vue-element-plus-admin

制造生产企业打造数字化生产管控的系统,从原材料、生产报工、生产过程、质检、设备、仓库等整个业务流程的管理和控制,合理安排生产计划、实时监控生产、优化生产工艺、降低不良产出和运营成本; 技术架构:springboot vue-elemen…

LLaMa系列模型详解(原理介绍、代码解读):LLaMA 3

LLaMA 3 2024年4月18日,Meta 重磅推出了Meta Llama 3,Llama 3是Meta最先进开源大型语言模型的下一代,包括具有80亿和700亿参数的预训练和指令微调的语言模型,能够支持广泛的应用场景。这一代Llama在一系列行业标准基准测试中展示…

UI问题 --- CardView和其它的控件在同一布局中时,始终覆盖其它控件

原本代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"40dp"android:layout_height"wrap_content"andr…

【Vue3】env环境变量的配置和使用(区分cli和vite)

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、env文件二、vue3cli加载env1..env配置2..dev配置&#xff08;其他环境参考&#xff09;3.package.json文件4.使用 三、vue3vite加载e…

MobaXterm使用私钥远程登陆linux

秘钥的形式使用MobaXterm 远程连接 linux 服务器 MobaXterm使用私钥远程登陆linux just填写远程主机 不指定用户 勾选使用私钥 选择私钥即可 1.使用秘钥连接 远程linux 服务器的好处 只需要第一次添加秘钥&#xff0c;并输入密码后&#xff0c;以后再连接就不需要再输入密码…

5款网页表白代码5(附带源码)

5款网页表白代码5 前言效果图及部分源码1.博客式表白2.故事式表白3.信封式表白4.信封式表白&#xff08;简洁版&#xff09;5.高级UI表白页 领取源码下期更新预报 前言 大部分人都有喜欢的人&#xff0c;学会这些表白代码&#xff0c;下次表白你肯定会成功。希望你有个女朋友 …

二叉树遍历操作详解

目录 一、思路详解 1.1 递归思路 1.2 递归分支图 1.3 递归栈帧图 二、C语言实现 2.1 前序遍历 2.2 中序遍历 2.3 后序遍历 三、查找值为x的结点 3.1 递归思路 3.2 C语言代码 一、思路详解 采用递归的思想解决问题&#xff0c;以高度为3的满二叉树为例。 1.1 递归思…

vscode更改语言,记录一下

首先打开安装好的Vscode软件&#xff0c;可以看到页面上显示的是英文效果。 同时按键ctrlshiftp&#xff0c;接着在输入框中输入 configure Display language如图&#xff1a; 选择中文简体就ok了&#xff0c;如果没有则安装 chinese Language pack

Qt QString详细用法

一.基础用法 1.创建QString对象 QString str1 "Hello, World!"; QString str2("This is a QString object."); //一个是等号的重载&#xff0c;一个是拷贝构造&#xff0c;本质上是等价的 2.获取字符串长度 int length str1.length(); // 返回字符串…

UBUNTU22.04无法安装nvidia-driver-550 依赖于 nvidia-dkms-550 (<= 550.54.15-1)

类似的报错信息&#xff0c;就是卡在了nvidia-dkms-550无法安装 Loading new nvidia-550.40.07 DKMS files… Building for 6.5.0-15-generic Building for architecture x86_64 Building initial module for 6.5.0-15-generic ERROR: Cannot create report: [Errno 17] File e…

项目启动失败,【consul】

如题&#xff0c;启动时项目未能正常启动&#xff0c;但上次都一切正常&#xff0c;日志提示&#xff1a; Consul service ids must not be empty, must start with a letter 经过排查是因为consul的consulconfigservice服务假死&#xff0c;导致无法正常获取到配置文件&am…

【全开源】JAVA人力资源招聘社会校招类型招聘系统校园招聘PC端

塑造企业高效招聘新体验 一、源码简介 招聘PC端源码&#xff0c;一款面向企业的招聘管理系统解决方案。它拥有完整的招聘流程管理功能&#xff0c;从职位发布到候选人管理&#xff0c;再到面试安排与结果反馈&#xff0c;所有环节都通过直观易用的界面进行展现&#xff0c;大…

tinyrenderer-移动镜头

同一个点的坐标在不同基坐标系中转换 设 (O, i,j,k)坐标系中点P坐标为 假设基坐标(i,j,k)与(i’,j’,k’)的转换关系为 如图&#xff0c;可以看出 其中(x’,y’,z’)为点P在基坐标(i’,j’,k’)下的坐标&#xff0c;(Ox’,Oy’,Oz’)为(i’,j’,k’)坐标系原点O’在(i,j,k…

【关键字】——register在C语言中的使用

register——寄存器 了解register之前&#xff0c;应该先认识认识寄存器&#xff0c;何为寄存器&#xff1f; 在计算机中&#xff0c;数据可以存储在远程二级存储&#xff08;网盘&#xff0c;服务器&#xff09;&#xff0c;本地二级存储&#xff08;本地磁盘&#xff09;&am…

DOS学习-目录与文件应用操作经典案例-move

欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 一.前言 move命令不仅能够对文件或目录进行重命名&#xff0c;还可以将文件转移到用户指定的位置。 二.使用 命令格式1&#xff08;重命名&#xff09;:move …

VR直播:改变我们的直播方式,让现场触手可及

VR直播是近期比较火爆的一种直播方式&#xff0c;相信在抖音上我们都刷到过转动手机、变换视角的VR直播&#xff0c;因为形式比较新颖&#xff0c;用户的参与度比较高&#xff0c;一场直播下来用户的打赏也是较为可观的。 不仅仅在直播行业&#xff0c;在众多应用领域中&#…