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

指针函数

形如: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,一经查实,立即删除!

相关文章

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

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

什么是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;我更想尝试逆风…

c语言实现http下载功能,显示进度条和下载速率

#include <stdio.h>//printf #include <string.h>//字符串处理 #include <sys/socket.h>//套接字 #include <arpa/inet.h>//ip地址处理 #include <fcntl.h>//open系统调用 #include <unistd.h>//write系统调用 #include <netdb.h>//…

机器学习实战:基于sklearn的工业蒸汽量预测

文章目录 写在前面工业蒸汽量预测1.基础代码2.模型训练3.模型正则化4.模型交叉验证5.模型超参空间及调参6.学习曲线和验证曲线 写在后面 写在前面 本期内容&#xff1a;基于机器学习的工业蒸汽量预测 实验环境&#xff1a; anaconda python sklearn 注&#xff1a;本专栏内所有…

K8s学习笔记——认识理解篇

1. K8s诞生背景 回顾应用的部署&#xff0c;经历了以下几个阶段&#xff1a; 传统部署&#xff1a;物理服务器上运行应用程序。虚拟机部署&#xff1a;物理服务器上安装虚拟机&#xff0c;在虚拟机上运行应用程序。容器部署&#xff1a;物理服务器上安装容器运行时&#xff0…

YB4554是一款经济高效、完全集成的高端输入电压单电池锂离子电池充电器。

YB4554 带OVP保护的高输入电压充电器 概述&#xff1a; YB4554是一款经济高效、完全集成的高端输入电压单电池锂离子电池充电器。这个充电器使用锂离子要求的CC/CV充电模式电池充电器可接受高达24V&#xff0c;但当输入电压超过OVP阈值&#xff0c;通常为6.8V&#xff0c;以防…

antdv使用a-cascader联级选择器实现自定义浮层样式

一般的使用组件库想要自定义样式都会使用深度选择器deep去实现 但是有的组件不管是deep还是!important还是写行内样式都改不掉 这里主要讲使用a-cascader联级选择器的浮层改变样式 一&#xff0c;使用组件 <a-cascader:options"regionOptions"change-on-selectv…