指针,指针变量,引用,取地址符,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 )

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

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

相关文章

提权方式及原理汇总

一、Linux提权 1、SUID提权 SUID(设置用户ID)是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。 为可执行文件添加suid权限的目的是简…

安卓CardView使用

目录 前言一、基础使用1.1 依赖导入1.2 CardView的常用属性1.3 CardView继承关系 二、关于Z轴的概念三、CardView效果3.1 圆角 CardView3.2 阴影 CardView3.3 设置卡片背景3.4 设置卡片背景(内部颜色)3.5 同时设置背景颜色 前言 CardView是Android支持库…

C#Csharp,SharpPcap网络抓包程序及源码(适合网络分析直接使用或源码二次开发)

目录 1.程序简介2.程序截图3.程序源码 1.程序简介 C#Csharp,SharpPcap网络抓包程序及源码(适合网络分析直接使用或源码二次开发) 2.程序截图 3.程序源码 https://download.csdn.net/download/xzzteach/89325817

BOM..

区别:

html5 笔记01

01 表单类型和属性 input的type属性 单行文本框: typetext 电子邮箱 : typeemail 地址路径 : type url 定义用于输入数字的字段: typenumber 手机号码: typetel 搜索框 : typesearch 定义颜色选择器 : typecolor 滑块控件 : typerange 定义日期 :typedate 定义输入时间的控件…

【OceanBase诊断调优】—— 直连普通租户时遇到报错:Tenant not in this server

本文介绍了直连 OceanBase 数据库中的普通租户时,出现报错:ERROR 5150 (HY000) : Tenant not in this server 的处理方法。 问题描述 在 n-n 或者 n-n-n (n>1) 的部署架构中,使用 2881 端口 直连 OceanBase 集群的普通租户,可…

首都师范大学聘请旅美经济学家向凌云为客座教授

2024年4月17日,首都师范大学客座教授聘任仪式在首都师范大学资源环境与旅游学院举行。首都师范大学资源环境与旅游学院院长吕拉昌主持了仪式,并为旅美经济学家向凌云教授颁发了聘书。 吕拉昌院长指出,要贯彻教育部产学研一体化战略&#xff0…

给树莓派配置静态IP地址

第一步:查找默认网关 打开windowr;输入cmd, 输入 最后一行就是默认网关 ipconfig第二步:确定分配好给树莓派的IP地址 要注意:(1)静态ip地址与路由器网段保持一致(2)与…

知乎广告推广开户最低需要多少钱?

精准高效的广告推广,是企业成功的关键,知乎作为知识分享与交流的高端平台,汇聚了大量高质量用户群体,无疑是品牌传播与产品推广的黄金之地。云衔科技作为您数字营销旅程中的得力伙伴,正以专业的知乎广告开户及代运营服…

Qt快速入门到熟练(电子相册项目(一))

经过一段时间的学习,相信大家对QT的基本用法都有所了解,从这篇文章开始,我准备记录一下电子相册的项目的一个学习过程。 实现项目创建功能 对于这个电子相册的项目,我并没有在一开始就把所有可能用到的功能模块去事无巨细的考虑周…

作为 App 开发者会推荐安装的 Mac App

Xcode,作为 App 开发者,必须安装的工具。当然,有经验的开发者不会从 Mac App Store 下载,而是从网站下载,除了安装过程更可控,也方便多版本共存。此外,我不信任任何第三方下载方式: …

在gitlab CICD中 小试 hooks:pre_get_sources_script 功能

参考链接: hooks:pre_get_sources_script 功能简介 hooks:pre_get_sources_script 是gitlab CICD中的一个功能,该功能可以指定在克隆 Git 仓库和任何子模块之前要在执行器上执行的某些命令。例如: 调整 Git 配置导出跟踪变量 下来简单给…

Vivado IP核的快速入门 官方手册和例程

在IP Catalog中选择要使用的IP核,可以查看支持的器件与资料。 在设计源sources页面中选中配置完成的IP核点击右键选择 Open IP Example Design,等待工程加载完成即可,可以点击Run Simulation进行功能仿真进行IP核的学习。 参考&#xff1…

Android开发环境基础

1.Android版本与SDK/API版本、JDK对应关系 参考博文: Android版本与SDK/API版本、JDK对应关系_minsdk 23对应安卓版本-CSDN博客 2.Android studio版本对用的gradle版本和插件版本(注意事项) 参考博文: Android studio版本对用的…

CentOS-9配置静态IP地址

查看配置命令nmcli CentOS 9 使用 nmcli 命令行工具进行网络配置。以下是配置静态 IP 地址的步骤和示例代码:相对以前centos7之类的,9版本的默认的网络是NetworkManager,网络配置也有较大改变 nmcli con show用vim进行编辑配文件 cd /etc/…

vue3(一) - 结构认识

通过之前博客应该已经完成了vue脚手架的认识和创建(地址),这节我们简单介绍一下需要使用的一些关键技术,后续在详细介绍 结构目录 创建脚手架时,我选择了TypeScript,store,route这三个选项 index.html入口 node_mo…

期中考复现

1.php渗透 用dirsearch 来扫描一下,发现了index.phps,访问一下 下载得到一个文件,打开看看,发现是一段php代码 分析得到, GET传参idadmin,主当$ GET[id] urldecode($ GET[id])时返回flag。即条件为 idadmin(urldecode…

数据可视化第十天(爬虫爬取某瓣星际穿越电影评论,并且用词云图找出关键词)

开头提醒 本次爬取的是用户评论,只供学习使用,不会进行数据的传播。希望大家合法利用爬虫。 获得数据 #总程序 import requests from fake_useragent import UserAgent import timefuUserAgent()headers{User-Agent:fu.random }page_listrange(0,10) …

《QT实用小工具·六十五》基于QPropertyAnimation实现的移动动画和控件覆盖

1、概述 源码放在文章末尾 该项目基于QPropertyAnimation实现了控件平移动画和控件之间的相互覆盖效果,项目demo演示如下所示: 项目解析: new QPropertyAnimation(ui.SingleOcclusion, “pos”); //创建动画对象,第一个参数传…

二.常见算法--贪心算法

&#xff08;1&#xff09;单源点最短路径问题 问题描述&#xff1a; 给定一个图&#xff0c;任取其中一个节点为固定的起点&#xff0c;求从起点到任意节点的最短路径距离。 例如&#xff1a; 思路与关键点&#xff1a; 以下代码中涉及到宏INT_MAX,存在于<limits.h>中…