05 C/C++ 指针复杂类型说明 9月5日

news2024/12/25 12:14:13

目录

C语⾔

(1)数组

(2)指针

指针变量

空指针

(3)指针复杂类型

int a = 0;

int *p = &a;

int p[3];​​​​​​​

int *p[3];

int (*p)[3];

int **p;

int p(int);

int(*p)(int);


C语⾔

(1)数组

当数据具有相同的数据类型;使用过程中需要保留原始数据使可以引用数组来使用。

1、数组的地址是数组的⾸元素地址;

2、数组的内存是连续的;

3、数组是一组有序数据的集合。数组中各数据的排列是有一定规律的;

4、数据中的每一个元素都属于同一个数据类型,不能把不同类型的数据放在同一个数组中;

5、用一个数组名和下标来唯一确定数组中的元素。

(2)指针

指针指向地址所在的值。

在存储时,内存被分为一块一块的。每一块都有一个特有的编号。而这个编号可以暂时理解为指针,就像酒店的门牌号一样。

指针变量

指针变量就是一个变量,它存储的内容是一个指针。如果用前面的例子,可以理解为指针变量就是一张房卡,房卡存储了房间号的信息。

如果指针变量p1保存了变量num的地址,则就说:p1指向了变量num,也可以说p1指向了num所在的内存块。

在我们定义一个变量的时候,要确定它的类型。int x、char ch、float......在定义指针变量时也是一样的,必须确定指针类型。int 变量的指针需要用 int 类型的指针存储,float 变量的指针需要用 float 类型的指针存储。就像你只能用酒店 A 的房卡存储酒店 A 中房间号的信息一样。

变量的指针就是变量的存储地址,指针变量就是存储指针的变量。

取地址:使⽤&运算符取得⼀个变量的地址。

空指针

在C语⾔中,让指针变量赋值为NULL表⽰⼀个空指针,⽽C语⾔中,NULL实质是((void*)0),在C++中,NULL实质是0。要避免空指针。

(3)指针复杂类型

int a = 0;

这是⼀个普通的整形变量。

int *p = &a;

声明p是⼀个指针,指向的内容为a地址所存储的int类型的值。

首先从p处开始,先与*结合,所以说明p是一个指针,然后在与int结合,说明指针所指向的内容的类型为int型,所以p是一个返回整型数据的指针。

int p[3];​​​​​​​

声明⼀个数组。

首先从p处开始,先与[]结合,说明p是一个数组,然后与int结合,说明数组里的元素是整型的,所以p是一个由整型数据组成的数组。

int *p[3];

⾸先从p开始,先与[]结合,因为其优先级⾼,所以p是⼀个数组,然后再与*结合,说明数组⾥的元素是指针类型,然后再与int结合,说明指针所指向的内容的类型是整型的,所以p是⼀个由返回整形数据的指针所组成的数组。

int (*p)[3];

⾸先从p处开始,先与*结合,说明p是⼀个指针,然后再与[]结合(与“()”这步可以忽略,只是为了改变优先级),说明指针所指向的内容是⼀个数组,之后再与int结合,说明数组⾥的元素是整型的,所以p是⼀个指向由整型数据组成的数组的指针。

int **p;

指针所指向的元素是指针。

首先从p开始,先与*结合,说是p是一个指针,然后再与*结合,说明指针所指向的元素是指针,然后再与int 结合,说明该指针所指向的元素是整型数据,由于二级指针以及更高级的指针极少用在复杂的类型中,所以后面更复杂的类型我们就考虑多级指针了,最多只考虑一级指针。

int p(int);

从p处起,先与()结合,说明p是一个函数,然后进入()里分析,说明该函数有一个整型变量的参数,然后再与外面的int 结合,说明函数的返回值是一个螫型数据。

int(*p)(int);

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

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

相关文章

在学习DNS的过程中给我的启发

在国内,关于DNS相关的话题一直络绎不绝,比如DNS根服务器为什么中国没有,还有Anycast BGP实现负载,为什么DNS只有13个,还有DNS over HTTPS 和 DNS over TLS的优劣等等问题,接下来我会找出几个一一说一下其中…

【Linux】- 一文秒懂shell编程

shell编程 1.1 Shell 是什么1.2 Shell 脚本的执行方式1.3 编写第一个 Shell 脚本2.1 Shell 的变量2.2 shell 变量的定义2.3 设置环境变量3.1 位置参数变量3.2 预定义变量4.1 运算符4.2 条件判断5.1 流程控制5.2 case 语句5.3 for 循环5.4 while 循环5.5 read基本语法6.1函数6.2…

API接口已经成为企业应用程序开发和管理的重要组成部分

API接口的价值 随着数字化时代的到来,API接口已经成为企业应用程序开发和管理的重要组成部分。API不仅是一种连接不同系统、提高数据流动性和促进协作的工具,而且还是一种重要的商业战略,可以为组织带来许多实际的价值。本文将探讨API接口的…

Android的本地数据

何为本地,即写完之后除非手动修改,否像嘎了一样在那固定死了 在实际安卓开发中,这种写死的概念必不可少,如控件的id,某一常量,Kotlin中的Val 当然,有些需求可能也会要求我们去写死数据&#x…

一文搞懂XaaS

云服务是指通过互联网按需提供给企业和客户的各种服务,大致可以分为IaaS、PaaS、SaaS三类,每一类又衍生出不同细分的云服务模式。本文介绍了当前已经提出的19种云服务模式,原文: The Comprehensive Concept of IaaS, PaaS, SaaS, AaaS, BaaS,…

基于STM32,TB6612,TCRT5000的简易红外循迹小车

提醒:本文章只叙述此小车相关大概内容(如模块的设置,C语言基础实现等),单片机详细教学不涉及。 摘要 循迹小车是学习单片机的“地基”,它能够让初学者认识单片机内部硬件结构及其功能,熟悉单片机…

安装RabbitMQ的各种问题(包括已注册成windows服务后,再次重新安装,删除服务重新注册遇到的问题)

一、安装Erlang(傻瓜式安装) 安装完成之后,配置环境变量: 1.新建系统变量名为:ERLANG_HOME 变量值为erlang安装地址 2. 双击系统变量path,点击“新建”,将%ERLANG_HOME%\bin加入到path中。 …

学习笔记——Java入门第一季

1.1 Java的介绍与前景 Java语言最早期的制作者:James Gosling(詹姆斯高斯林) 1995年5月23日,Sun Microsystems公司宣布Java语言诞生。 1.2 Java的特性与版本 跨平台 开源(开放源代码) Java代码&#xff…

酷开系统游戏空间,开启大屏娱乐新玩法

在这个充满科技感和无限创意的时代,游戏已经成为我们生活的一部分。而随时着科技的不断发展,以及游戏爱好者的游戏需求在不断提高,促使游戏体验也向更加丰富多彩的方向发展。显然,酷开科技早已经认识到游戏发展的新蓝图&#xff0…

金鸣识别名片识别模块 ,名片扫描仪的神仙“伴侣”

名片扫描仪是现代办公中常见的设备,其作用是将纸质名片转换为电子格式并进行识别。在实现这一功能方面,使用自带OCR功能和金鸣识别两种方式均具有各自的优势。 一方面,自带OCR功能的名片扫描仪具有便捷性和即时性的优势。通过设备内置的OCR技…

国产信创服务器如何进行安全可靠的文件传输?

信创,即信息技术应用创新,2018年以来,受“华为、中兴事件”影响,国家将信创产业纳入国家战略,并提出了“28n”发展体系。从产业链角度,信创产业生态体系较为庞大,主要包括基础硬件、基础软件、应…

SpringMVC综合案例

目录 一、SpringMVC常用注解 二、传递参数 2.1 基础类型String 2.2 复杂类型 2.3 RequestParam 2.4 PathVariable 2.5 RequestBody 2.6 RequestHeader 2.7 请求方法 三、返回值 3.1 void 3.2 String 3.3 StringModel 3.4 ModelAndView 四、页面跳转 4.1 转发 4…

iPhone用户的价值是安卓用户的4倍?难以置信,研究发现竟是7.4倍

据Asymco机构分析师Horace Dediu发布的最新报告,苹果用户在应用上的平均支出是安卓用户的7.4倍,远高于此前提出的4倍观点。这意味着,尽管安卓用户数量是iPhone用户的两倍,但iPhone应用商店开发者的收入是谷歌PlayStore的两倍。 在…

淘宝销量展示方式变更背后的逻辑

淘宝销量展示方式发生了调整,平台于8月16日将商品详情销量展示表达由【月销**件】全部换成展示【已售**件】,将30天销量改成了近365天销量。 【已售**件】统计口径:统计近365天支付的商品件数,数据更新请关注24-48小时。其中涉及销…

数据库模式迁移工具的演进:CLI,GUI,集成式协作数据库平台

数据库模式迁移可能是应用程序开发中最具风险的领域,它困难、有风险且令人痛苦。数据库模式迁移工具的存在就是为了减轻这些痛苦,并且已经取得了长足的进步:从基本的CLI工具到GUI工具,从简单的SQL GUI客户端到集成式协作数据库平台…

PROSOFT PTQ-PDPMV1网络接口模块

通信接口:PROSOFT PTQ-PDPMV1 网络接口模块通常配备了多种通信接口,以便与不同类型的设备和网络进行通信。常见的接口包括以太网、串行端口(如RS-232和RS-485)、Profibus、DeviceNet 等。 协议支持:该模块通常支持多种…

《向量数据库指南》——AI原生向量数据库Milvus Cloud 2.3 新功能ScaNN 索引和Iterator

ScaNN 索引 Milvus 目前支持了 Faiss 中的 FastScan 算法,在各项 benchmark 中有着不俗的表现,对比 HNSW 有 20% 左右提升,约为 IVFFlat 的 7 倍,同时构建索引速度更快。ScaNN 在算法上跟 IVFPQ 比较类似,聚类分桶,然后桶里的向量使用 PQ 做量化,区别是 ScaNN 对于量化比…

ATC模型转换动态shape问题案例

ATC(Ascend Tensor Compiler)是异构计算架构CANN体系下的模型转换工具:它可以将开源框架的网络模型(如TensorFlow等)以及Ascend IR定义的单算子描述文件转换为昇腾AI处理器支持的离线模型;模型转换过程中&a…

【C++】动态内存管理

【C】动态内存管理 new和delete用法内置类型自定义类型抛异常定位new 刨析new和delete的执行与实现逻辑功能执行顺序newdelete 功能实现operator new与operator delete malloc free与new delete的总结 在我们学习C之前 在C语言中常用的动态内存管理的函数为: mallo…

与数据库性能作斗争:间歇性超时问题

今年早些时候,当我们与数据库互动时,我们的应用程序在两周的时间里出现了间歇性的超时问题。 尽管我们尽了最大的努力,但我们不能立即确定一个明确的原因;我们并没有进行任何明显改变数据库使用方式的代码更改,也没有…