C语言指针进阶学习心得-函数指针,指针函数,指针数组,数组指针

 

一:指针数组和数组指针


    1.指针数组:指针数组的元素都是指向某种数据类型的指针


    例:
       声明方式:int *ptr[3];              ptr数组的元素都是指向int类型的数据

        #include <stdio.h>int main() {  int  *ptr[3];//数组元素类型为 整形指针int A1=1,A2=2,A3=3;ptr[0] = &A1; //存储整型变量的地址ptr[1] = &A2;ptr[2] = &A3;for(int i=0; i<3; i++)printf("Value: %d  \r\n", *ptr[i]); //对数组内存储的指针进行解引用,取出地址中的数据    return 0;}


        进阶用法1:指针数组保存二维数组的第一维首地址

        #include <stdio.h>int main() {  char c[][5] = { "abcd", "efgh", "ijkl" };char *pc[3];int i;for ( i = 0; i < 3; i++ ) {pc[i] = c[i];}for ( i = 0; i < 3; i++ ) {printf("%s\n", pc[i]);}return 0;}        


        进阶用法2: 函数指针数组

       #include <stdio.h>     void f1(void){printf("Value1");}           void f2(void){printf("Value2");}           void f3(void){printf("Value3");}    int main() {  void  (*ptr[3])(); //类型为函数指针的指针数组ptr[0]=f1;ptr[1]=f2;ptr[2]=f3;for(int i=0; i<3; i++)ptr[i](); //调用函数指针数组内的函数   return 0;}    

2.数组指针:是指向数组的指针,在定义数组指针时,必须指定该指针指向的数组的大小
   声明方式:char (*pb)[5];

         分析: [ ] 的优先级比*的优先级要高,加上括号之后就是先执行()内的动作, 因为有括号,所以pb先和*结合,表示pb是一个指针,再和[]结合,表示pb是一个指向类型为char,大小为5的数组的指针。

        #include <stdio.h>int main() {  char b[][5] = { "abcd", "efgh", "ijkl" };    char  (*ptr)[5]; //数组指针ptr=b;printf("%s\r\n",*ptr);return 0;}

二:指针函数和函数指针


    1.指针函数:  char *function(void);


    指针函数的声明如上,用法和普通函数一样,只是它的返回值是一个指针而已(或者说是一个地址)。 指针函数我们经常见到,比如strcpy函数等等。
        分析:()的优先级高于*,所以function先和()结合,function是一个函数,再和*结合,表示函数的返回值是一个指针,
        类型是char,返回值是一个指向char类型的指针。这种函数其实叫做指针函数。

            #include <stdio.h>#include <string.h>#include <stdlib.h>char *str_var(char *s) {char *str = (char *)malloc(sizeof(char) * strlen(s) + 1);strcpy(str, s);return str;}int main() {  //char *str = "Hellow world"; //这样子的声明,该字符串会被定义为只读,不可修改其内容char *str = str_var("Hellow world");/*该函数则是通过申请一块内存来存放这些字符串,这样就可以修改其数据*/printf("%s\n",str);return 0;}

    2.函数指针


     函数指针的声明方式如下:        
        char (*fun)(void);
        分析:由于括号的存在,fun先和*结合,fun是一个指针,再和右边的()结合,表示一个函数,函数返回类型为char。
        fun是一个指向返回类型为char的函数。是的,指针可以指向一个函数的指针。
        严格来说指针只能指向地址,因为函数名本质上代表的是一个地址(函数的首地址),所以指针可以指向函数。
       用法如下:

       #include <stdio.h>    typedef void(*Func)(char);//重命名函数类型void f1(char a){printf("Value1=%d\r\n", a);}           void f2(char a){printf("Value2=%d\r\n",a);}           void f3(char a){printf("Value3=%d\r\n",a);}    int main() {  //void  (*ptr[3])(); //类型为函数指针的指针数组Func ptr[3];ptr[0]=f1;ptr[1]=f2;ptr[2]=f3;for(char i=0; i<3; i++)ptr[i](i); //调用函数指针数组内的函数   return 0;}

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

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

相关文章

FreeRTOS 学习相关笔记 附C语言内容补充

学习视频为【正点原子】手把手教你学FreeRTOS实时系统 文章目录 RTOS 入门裸机RTOSFreeRTOS任务调度方式任务状态 FreeRTOS 移植系统配置文件 API函数任务创建和删除动态方式创建任务静态方式创建任务删除任务 任务挂起和恢复函数调度器挂起与恢复临界区任务调度器的挂起和恢复…

鸿蒙开发已解决-Failed to connect to gitee.com port 443: Time out 连接超时提示

文章目录 项目场景:问题描述原因分析:解决方案:解决方案1解决方案2:解决方案3:此Bug解决方案总结解决方案总结**心得体会:解决连接超时问题的三种方案**项目场景: 导入Sample时遇到导入失败的情况,并提示“Failed to connect to gitee.com port 443: Time out”连接超…

实战使用工具appuploader上线发布苹果商店

实战使用工具appuploader上线发布苹果商店 我们发布ios应用的时候&#xff0c;步骤繁琐&#xff0c;非常耗时&#xff0c;appuploader工具就是解决一站式从上传到发布到appstore应用商店的&#xff0c;当我们开发完app后&#xff0c;需要将ipa/apk提交给测试人员测试&#xff0…

【python】No module named ‘pip‘问题

一、问题描述 win11上安装的Python版本有几个&#xff0c;不知道那里出问题了。用pip总是提示&#xff1a; Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line …

完整的JAVA酒店管理系统源码带安装部署文档

完整的JAVA酒店管理系统源码带安装部署文档 002.png (135.63 KB, 下载次数: 0) 下载附件 设为封面 半小时前 上传

鸿蒙开发现在就业前景怎样?

随着科技的不断进步&#xff0c;鸿蒙系统逐渐崭露头角&#xff0c;成为智能设备领域的一颗新星。作为华为自主研发的操作系统&#xff0c;鸿蒙系统拥有着广阔的市场前景和就业机会。那么&#xff0c;鸿蒙开发的就业前景究竟怎样呢&#xff1f; 一、市场需求持续增长 随着鸿蒙…

OpenHarmony源码解析之编译构建

前言 OpenHarmony是由开放原子开源基金会&#xff08;OpenAtom Foundation&#xff09;孵化及运营的开源项目&#xff0c;目标是面向全场景、全连接、全智能时代、基于开源的方式&#xff0c;搭建一个智能终端设备操作系统的框架和平台&#xff0c;促进万物互联产业的繁荣发展…

Redis五大数据类型以及相关操作

Redis五大数据类型 文章目录 Redis五大数据类型key字符串string操作命令列表list集合set哈希hash有序集合zset (sorted set) key keys * 查看当前库的所有键exists <key> 判断某个键是否存在type <key> 查看键的类型del <key> 删除某个键expire <key>…

vue3-计算属性

计算属性 模板中的表达式虽然方便&#xff0c;但也只能用来做简单的操作。如果在模板中写太多逻辑&#xff0c;会让模板变得臃肿&#xff0c;难以维护。 根据作者今年是否看过书展示不同信息 <script lang"ts" setup> import { ref, reactive } from "…

Spring DI的理解和实现方式

Spring DI&#xff1a; 名词解释&#xff1a;依赖注入&#xff0c;是对IOC概念的不同角度的描述&#xff0c;是指应用程序在运行时&#xff0c; 每一个bean对象都依赖IOC容器注入当前bean对象所需要的另外一个bean 对象。&#xff08;例如在MyBatis整合Spring时&#xff0c;Sq…

杨中科 .NETCORE ENTITY FRAMEWORK CORE-1 EFCORE 第一部分

一 、什么是EF Core 什么是ORM 1、说明: 本课程需要你有数据库、SOL等基础知识。 2、ORM: ObjectRelational Mapping。让开发者用对象操作的形式操作关系数据库 比如插入: User user new User(Name"admin"Password"123”; orm.Save(user);比如查询: Book b…

C#进阶学习

目录 简单数据结构类ArrayList声明增删查改遍历装箱拆箱 Stack声明增取查改遍历装箱拆箱 Queue声明增取查改遍历 Hashtable声明增删查改遍历装箱拆箱 泛型泛型分类泛型的作用泛型约束 常用泛型数据结构类List声明增删查改遍历 Dictionary声明增删查改遍历 LinkedList声明增删查…

设计模式⑤ :一致性

一、前言 有时候不想动脑子&#xff0c;就懒得看源码又不像浪费时间所以会看看书&#xff0c;但是又记不住&#xff0c;所以决定开始写"抄书"系列。本系列大部分内容都是来源于《 图解设计模式》&#xff08;【日】结城浩 著&#xff09;。该系列文章可随意转载。 …

【Docker】Linux中Docker镜像结构及自定义镜像,并且上传仓库可提供使用

目录 一、镜像结构 1. 基本结构 2. 常用命令 二、自定义镜像 1. 基本镜像 2. 进阶镜像 3. 完善镜像 三、镜像上传仓库 每篇一获 一、镜像结构 自定义 Docker 镜像有很多用途&#xff0c;以下是一些主要的应用场景&#xff1a; 一致性环境&#xff1a;通过自定义镜像&a…

Gauss消去法(C++)

文章目录 算法描述顺序Gauss消去法列选主元Gauss消去法全选主元Gauss消去法Gauss-Jordan消去法 算法实现顺序Gauss消去法列选主元Gauss消去法全选主元Gauss消去法列选主元Gauss-Jordan消去法 实例分析 Gauss消去法是求解线性方程组较为有效的方法, 它主要包括两个操作, 即消元和…

正则表达式Regex

是什么&#xff1a;一句话&#xff0c;正则表达式是对字符串执行模式匹配的技术。 从一段字符串中提取出所有英文单词、数字、字母和数字。 如果采用传统方法&#xff1a;将字符串的所有字符分割成单个&#xff0c;根据ASCII码判断&#xff0c;在一定范围内就是字母&#xff…

pymssql 报错误解决办法:20002, severity 9

错误 解决办法 python3.6&#xff0c;安装pymssql低版本&#xff08;pymssql-2.1.5-cp36-cp36m-win32.whl&#xff09;

【教3妹学编程-算法题】构造限制重复的字符串

3妹&#xff1a;“太阳当空照&#xff0c;花儿对我笑&#xff0c;小鸟说早早早&#xff0c;你为什么背上炸药包” 2哥 :3妹&#xff0c;什么事呀这么开森。 3妹&#xff1a;2哥你看今天的天气多好啊&#xff0c;最近一周都是大晴天&#xff0c;艳阳高照 2哥&#xff1a;是啊&am…

ssh一直被扫描,有办法解决吗?-速盾网络(sudun)

如果您的SSH服务器一直被扫描&#xff0c;可能是因为黑客试图入侵您的系统。为了保护您的服务器安全&#xff0c;可以采取以下措施&#xff1a; 更改SSH端口&#xff1a;将默认的SSH端口&#xff08;22&#xff09;更改为其他非常用端口&#xff0c;这可以减少扫描活动的数量。…

C++关联容器

1. 关联容器概述 1.1 关联容器类型 关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的。两个主要的关联容器类型是map和set。map 中的元素是一些关键字—值对,关键字起到索引的作用…