浅谈指针函数、函数指针、指针数组、数组指针 简单明了!!!!

指针函数

形如:int* fun(int a, int b)
类比于:int fun(int x, int y)、char fun(int x, int y)
本质上是函数,只是返回值为int类型的指针,以此类推可以有void*、char*、unsigned char*类型等指针,类比于返回值是int char void的函数。
返回值要取地址 :不可返回局部变量的地址

#include <stdio.h>
#include <stdlib.h>
#include <string.h>/*指针函数*/
char *init()      //指针函数 即返回值是一个char *类型的函数
{// char str[32] = {0}; //栈空间 函数结束会释放内存 不可返回地址char *str = (char *)malloc(128);  //堆空间 可以return str;
} 
int main()
{char *s = init();strcpy(s, "hello");printf("%s",s);free(s);return 0;
}
hello

指针函数举例2

函数指针

形如:int (*fun)(int a, int b)
本质上是指针,只不过(*fun)指针指向一个函数,指向的是一个int ???(int a, int b)函数
???即为对应指向的函数名
调用方法:
fun = ???
(*fun)(1,2)

#include <stdio.h>/*函数指针  */void f1()
{printf("hello world\n");
}int add(int x, int y)
{return x + y;
}int main()
{void (*p)();        //定义函数指针  定义一个函数类型的指针,且没有参数和返回值p = f1;p();                //通过函数指针调用函数 等价于f1()//int (*q)(int a, int b);//q = add;int (*q)(int, int) = add;printf("%d\n", q(1, 3)); //调用方式1printf("%d\n",(*q)(1,3)); //调用方式2return 0;
}

在这里插入图片描述

指针数组

形如:char *str[3] = {“Monday”, “Tuesday”,“Wednesday”};
类比于:char str[3]、或者int p[3]
本质上是数组,只是类型上是char *指针类型,类比于定义数组为int、char类型的数组。
数组内的数据是对应变量的地址。如下图所示,str[0]就为char *类型的指针变量,指向了内存地址为0x500(假设任取的地址值)。
上面是讨论数组里的是什么?另一方面讨论数组的地址,切不可混淆,读者若混淆建议类比于int或者char类型数组参考。
首先,数组的数组名str显然是数组的首地址,假设为0x1000,在64位系统中,指针占8个字节,故str[1]即:str+1的地址为0x1008,以此类推。
在这里插入图片描述

数组指针

形如:char (str)[3]
类比于:char * str、int
str等
本质上是指针,只不过是指向整个数组,数组元素有3个,每个都是char类型;而int* str指针是指向int类型变量的指针。
在这里插入图片描述

#include <stdio.h>int main()
{char (*str)[3] = NULL; //数组指针 指向数组,那么要定义一个符合这个指针的数组char s[3] = "ab"; //专门定义一个char类型的含有3个元素的数组//str = s;		//s指的是这个数组的第一个元素的首地址 故不可取str = &s;		//&s指的是整个数组的首地址printf("output result :%s", *str);printf("%p\n", str);printf("%p", str + 1);return 0;
}

在这里插入图片描述

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

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

相关文章

蓝桥杯-成绩统计[Java]

目录: 学习目标&#xff1a; 学习内容&#xff1a; 学习时间&#xff1a; 题目&#xff1a; 题目描述: 输入描述: 输出描述: 输入输出样例: 示例 1: 运行限制: 题解: 思路: 学习目标&#xff1a; 刷蓝桥杯题库日记 学习内容&#xff1a; 编号502题目成绩统计难度…

产品经理墨刀学习----注册页面

我们做的产品是一个校园论坛学习开发系统&#xff0c;目前才开始学习。 &#xff08;一&#xff09;流程图 &#xff08;二&#xff09;简单墨刀设计--注册页面 &#xff08;1&#xff09;有账号 &#xff08;a&#xff09;直接登录&#xff1a; &#xff08;b&#xff09;忘…

LeetCode 318. 最大单词长度乘积

给你一个字符串数组 words &#xff0c;找出并返回 length(words[i]) * length(words[j]) 的最大值&#xff0c;并且这两个单词不含有公共字母。如果不存在这样的两个单词&#xff0c;返回 0 。 示例 1&#xff1a; 输入&#xff1a;words ["abcw","baz"…

什么是Target Plus EDI?

“Target Plus” 是美国知名零售商Target&#xff08;塔吉特&#xff09;推出的一个合作伙伴计划。这个计划允许第三方卖家在Target.com&#xff08;塔吉特官方网站&#xff09;上销售他们的商品。通过Target Plus&#xff0c;第三方卖家可以将他们的产品列在Target.com上&…

ZKP8.2 FRI (Univariate) Polynomial Commitment

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 8: FRI-based Polynomial Commitments and Fiat-Shamir (Justin Thaler) 8.2 FRI (Univariate) Polynomial Commitment Recall: Univariate Polynomial Commitments Initial Attempt from Lecture 4 (Merkle Tree) Fixing…

【LearnOpenGL基础入门——2】搭建第一个OpenGL窗口

目录 一.配置GLFW 二.配置GLAD 三.第一个OpenGL窗口 3.1 GLFW设置 3.2 GLAD设置 3.3 视口 3.4 输入 3.5渲染 在我们画出出色的效果之前&#xff0c;首先要做的就是创建一个OpenGL上下文(Context)和一个用于显示的窗口。然而&#xff0c;这些操作在每个系统上都是不一样…

远程调用,参数压缩问题

错误信息 { "msg": "Error while extracting response for type [XXX] and content type [application/json;charsetUTF-8]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal charac…

Azure 机器学习 - 使用Python SDK训练模型

目录 一、环境准备二、工作区限制三、什么是计算目标&#xff1f;四、本地计算机五、远程虚拟机六、Apache Spark 池七、Azure HDInsight八、Azure Batch九、Azure Databricks十、Azure Data Lake Analytics十一、Azure 容器实例十二、Kubernetes 了解如何用 SDK v1 将 Azure 计…

01-基于IDEA,Spring官网,阿里云官网,手动四种方式创建SpringBoot工程

快速上手SpringBoot SpringBoot技术由Pivotal团队研发制作&#xff0c;功能的话简单概括就是加速Spring程序初始搭建过程和Spring程序的开发过程的开发 最基本的Spring程序至少有一个配置文件或配置类用来描述Spring的配置信息现在企业级开发使用Spring大部分情况下是做web开…

UE5、CesiumForUnreal实现加载GeoJson绘制单面(Polygon)功能(StaticMesh方式)

文章目录 1.实现目标2.实现过程2.1 实现原理2.1.1 数据读取2.1.2 三角剖分2.1.3 创建StaticMesh2.2 应用测试2.2.1 具体代码2.2.2 蓝图应用测试3.参考资料1.实现目标 通过读取本地GeoJson数据,在UE中以StaticMeshComponent的形式绘制出面数据,支持Editor和Runtime环境,GIF动…

【验证码系列】利用深度学习构建字符型验证码自动识别模型与算法

文章目录 1. 写在前面2. CSCI级设计决策2.1. 字符型验证码识别智能体流程关联2.2. 字符型验证码识别行为设计 3. 字符型验证码识别智能体结构设计3.1. 智能体部件组成3.2. 智能体结构 4. 接口设计4.1. 字符型验证码识别智能体交互 5. 智能体算法设计细节5.1. 算法目标5.2. 字符…

使用表单登录方法模拟登录通信人家园,要求发送登录请求后打印出来的用户名下的用户组类别

目标网站&#xff1a;https://www.txrjy.com/forum.php 一、进入网页&#xff0c;右键“检查” 二、输入用户名和密码&#xff0c;点击“登录”&#xff0c;点击“Network”,上划加载项找到蓝色框中的内容 三、点击第一个加载项&#xff0c;找到URL 四、相关代码&#xff1a; …

苍穹外卖-day05

苍穹外卖-day05 课程内容 Redis入门Redis数据类型Redis常用命令在Java中操作Redis店铺营业状态设置 功能实现&#xff1a;营业状态设置 效果图&#xff1a; 选择营业中&#xff0c;客户可在小程序端下单&#xff1a; 选择打烊中&#xff0c;客户无法在小程序端下单&#xf…

git and svn 行尾风格配置强制为lf

git CLI配置&#xff1a; // 提交时转换为LF&#xff0c;检出时转换为CRLF git config --global core.autocrlf true // 提交时转换为LF&#xff0c;检出时不转换 git config --global core.autocrlf input // 提交检出均不转换 git config --global core.autocrlf f…

提升(Hoisting)和暂时死区(TDZ)在实践中的应用

变量提升 ● 首先我们先声明三个变量&#xff0c;并在声明之前去使用这个变量 console.log(me); console.log(job); console.log(year);var me IT知识一享; let job teacher; const year 1991;使用var声明变量&#xff0c;变量声明会被提升到作用域的顶部&#xff0c;但是…

EasyExcel实现动态表头功能

EasyExcel实现动态表头功能 开发过程中&#xff0c;大部分都会使用到导出报表功能&#xff0c;目前阶段会用得有 poi导出&#xff08;暂无&#xff09;&#xff0c; easyexcel导出&#xff08;官方文档&#xff0c;https://easyexcel.opensource.alibaba.com/docs/current/&am…

【C++】特殊类设计+类型转换+IO流

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

前端解决跨域 3 种方法 -对接读卡器时出现跨域问题

目录 背景概述实现中遇到的问题解决方法1 - 反向代理方法2 - JSONP实现1实现2 借助jQuery&#xff08;我用的&#xff09; 方法3 - 原生请求方法4 - 接口请求时请求头解决跨域 背景概述 开发过程中对接读卡器硬件时&#xff0c;和C工程师对接&#xff0c;C工程师写了一个程序&a…

Tomcat的HTTP Connector

https://tomcat.apache.org/tomcat-10.1-doc/config/http.html 一个Connector代表一个接收请求、返回响应的端点&#xff08;endpoint&#xff09;。 HTTP Connector 元素代表一个支持HTTP/1.1的Connector组件。一个这样的组件在服务端一个指定的TCP端口上监听连接。一个Serv…

IC - 基础知识 - SOC与MCU

说明 工作中有涉及到SOC和MCU&#xff0c;非嵌入式专业&#xff0c;对两个概念理解不是很清晰。 共同点 MCU和SOC是两种常见的集成电路 (IC) 设计形式&#xff0c;它们的区别在于它们的设计目的和应用场景。工作中将MCU和SOC都称为IC也是没问题的&#xff0c;但是专业人员会…