首页 > 其他分享 >C语言------------指针

C语言------------指针

时间:2024-04-03 14:30:38浏览次数:19  
标签:10 函数 指向 int C语言 ------------ 数组 指针

指针的类型:

指针 : 在学习指针之前,要有一个认知,那就是指针 == 地址;

  1. 指针的基本使用:

这里要注意三点:1.*标识符—————只产生在指针变量定义或声明的时候;

2.指针的类型要和被赋值的类型一致;

3. *p = *(p) 这2个的意思是一样的;

在scanf中,不能使用指针进行;

上面的是最基本的指针定义和使用;

  1. 指针引用到数组:

和第一个的一样;差别在于把一维数组名来传参,和下面的函数封装一样:

简单来说,就是把之前的数组名用指针的形式来写

3 . 指针和二维数组 :

二维数组在指针里面,要明白的就只有两点 “是偏移了多少”“怎么表达”

第一个问题:偏移了多少?

在二维数组里面,又可以分成两个一维数组,分别是以数组命名为的一维数组,数组里面的元素又为数组 ; 即父数组

一个是列数组,它的跨度是4个字节; 即子数组;

a + 1 ? 是偏移1个行,就是a[0] 到a[1];

a[0] + 1 ? 是偏移了1个数,就是它旁边的,比喻:a[0][0] 到 a[0][1];

  1. 函数数组 :

顾名思义,就是把函数名代替成指针;

函数指针:

  • 函数指针是指向函数的指针变量。它存储的是函数的地址,可以用来调用函数。
  • 函数指针的声明类似于函数声明,只是将函数名替换为指针变量名,并在前面加上 *​。
  • 函数指针的使用需要先声明一个函数指针变量,然后将函数的地址赋给它,最后通过函数指针来调用函数。
  • void (*p)(); // 声明一个函数指针变量p = functionName; // 将函数的地址赋给指针变量p(); // 通过函数指针调用函数

int (*p)(int ,int);

这个是函数指针的书写方式;

4.指针数组

定义一个指针,指向一个数组;

int (*p)[3];

各种指针的定义:

1,一个整型数:int a;

2,一个指向整型数的指针:int *a;

**3,一个指向指针的指针,他指向的指针指向一个整型数:int a;

4,一个有10个整型数的数组:int a[10];

5,一个有10个指针的数组,每个指针指向一个整型数:int *a[10];

6,一个指向有10个整型数的数组的指针:

int (*a)[10];

7,一个指向指针的指针,被指向的指针指向一个有10个整型数的数组:

int (**a)[10];

8,一个指向数组的指针,该数组有10个整形指针:

int *(*a)[10];

9,一个指向函数的指针,该函数有一个整形参数并返回一个整型数:

int (*a)(int);

10,一个有10个指针的数组,每个指针指向一个函数,该函数有一个整形参数并返回一个整型数:

int (*a[10])(int);

11,一个函数的指针,指向的函数的类型是有两个整形参数并且返回一个函数指针的函数,返回的函数指针指向有一个整形参数且返回整型数的函数:

int*((*a)(int int))(int);

这个声明 int(*(*a)(int,int))(int);​ 是C语言中的一个相对复杂的函数指针声明。要理解它,我们可以逐步拆解它。

首先,我们从里到外、从左到右地分析这个声明。

  1. 最内层的括号 (*a)(int,int)​: 这部分表示 a​ 是一个指向函数的指针,这个函数接受两个 int​ 类型的参数。
  2. 中间的 \*​: 这个星号表示函数 a​ 所指向的函数返回的是一个指针。
  3. 最外层的括号 int(* ... )(int)​: 这部分描述了上一步中提到的指针所指向的内容。它表示这个指针指向一个函数,这个函数接受一个 int​ 类型的参数,并返回一个 int​ 类型的值。

综上,整个声明 int(*(*a)(int,int))(int);​ 可以理解为:

  • ​a​ 是一个指针,指向一个函数。
  • 这个函数接受两个 int​ 类型的参数。
  • 这个函数返回一个指针,这个指针指向另一个函数。
  • 这个被返回的函数接受一个 int​ 类型的参数,并返回一个 int​ 类型的值。

标签:10,函数,指向,int,C语言,------------,数组,指针
From: https://blog.csdn.net/Y2002168/article/details/137278686

相关文章

  • MySQL数据库:第十六章:sql高级函数,和腾讯大牛的技术面谈
    CURDATE()或CURRENT_DATE()返回当前的日期CURTIME()或CURRENT_TIME()返回当前的时间DATE_ADD(date,INTERVALintkeyword)返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化),如:SELECTDATE_ADD(CURRENT_DATE,INTERVAL6MONTH);DATE_FORMAT(date,fmt......
  • K11998 括号画家
    题目描述小科是一名漫画家,他有一个奇特的爱好,就是在纸上画括号。这一天,刚刚起床的他画了一排括号序列,其中包含小括号()、中括号[]和大括号{},总长度为N。这排随意绘制的括号序列显得杂乱无章,于是小科定义了什么样的括号序列是美观的:①空的括号序列是美观的;②若括号序列A是......
  • Quill文档(六):Parchment详解
    Parchment是Quill的文档模型。它是与DOM树并行的树形结构,并为内容编辑器(如Quill)提供有用的功能。Parchment树由Blots组成,这些Blots镜像了DOM节点的对应物。Blots可以提供结构、格式和/或内容。Attributors还可以提供轻量级格式信息。注意:您不应使用new直接......
  • 逆袭大厂之路——Java程序员必备金九银十跳槽面试涨薪秘籍
    JAVA集合JAVA多线程并发JAVA基础Spring原理微服务Netty与RPC网络ZookeeperKafka自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是......
  • WPF-基础及进阶扩展合集(持续更新)
    目录一、基础1、GridSplitter分割线2、x:static访问资源文件3、wpf触发器4、添加xaml资源文件5、Convert转换器6、多路绑定与多路转换器二、进阶扩展1、HierarchicalDataTemplate2、XmlDataProvider从外部文件获取源3、TextBox在CellTemplate中的焦点问题4、让窗体......
  • Python-脆弱性信息收集
    公司做系统集成,有搜集产品脆弱性需求,包括cisco,vmware,redhat,F5等厂家。如:SecurityAdvisories具体需求:1.每天定时搜集十来个网络设备厂家网站新发布的脆弱性2.根据产品和等级不同,邮件发给不同公司人员,内容包括:新脆弱性链接,脆弱性标题,CVE编号,发布时间等2.不能发送重复脆弱性......
  • 中间件_ROS2和CyberRT
    中间件中间件的主要任务,是负责各类应用软件模块之间的通信以及对系统资源的调度。进程间通信的机制(IPC:inter-processcommuniction)内容都是与具体应用逻辑无关的,包括数据通信、通信安全、系统资源调度等1.Ros2.iceoryx「冰羚」RouDi的名称由来是’‘Rou’‘ting和......
  • 使用inno setup 打包Pyinstaller生成的文件夹
    背景:pyinstaller6.5.0、InnoSetup6.2.21. 需要先使用pyinstaller打包,生成包括exe在内的可执行文件夹注意:直接使用pyinstaller打包,生成的文件夹较大,建议在python安装路径中的Scripts文件夹中,将脚本等文件复制过来,将打包命令中的pyinstaller替换为pyinstaller.exe打包,生成的文......
  • gulp del 拾遗
    gulp打包的时候,先删除,再打包 代码如下: 出现异常: 看错误提示,感觉是clean删除文件和后面的打包是同时进行的。但是看打包进度提示,clean完成后才进行的后续打包: 凭经验感觉,应该是del应该是异步操作。下面是clean代码: 还是看看del的readme吧! 看到这里aw......
  • 银河麒麟高级服务器操作系统(AMD64版)V10 7
    银河麒麟高级服务器操作系统(AMD64版)V10部署发布.NETframeworkWebFroms项目下载ios镜像麒麟生态官网下载:https://eco.kylinos.cn/找到需要下载的镜像,注意版本,电脑是国产芯片的看一下对应的版本下载,AMD和Intel芯片下载AMD版的或者点击下面地址直接下载https://distro-imag......