当前位置: 首页 > news >正文

C语言指针(中)

系列文章目录

第九章 操作符详解
第十章 C语言指针(上)

文章目录

  • 系列文章目录
  • 前言
  • 一、字符指针变量
  • 二、数组指针变量
  • 三、二维数组传参
  • 四、函数指针变量
  • 总结

前言

本文接上篇指针内容,继续书写指针的内容。


一、字符指针变量

在指针类型中有一种指针类型叫做字符指针 char*

charch='w';char*pc=&ch;char*pstr="hello world";

这里关于字符串指针和数组的类似,并非是把整个字符串放入到指针变量之中,而是存放首元素字符的地址。

charstr1[]="hello world";charstr2[]="hello world";char*str3="hello world";char*str4="hello world";

这里若是使用==判断str1和str2,会发现输出的是false,而str3和str4却是true,这是因为C/C++会把常量字符串单独存储到一个内存区域,当几个指针指向同一个字符串的时候,他们实际会指向同一块内存。但是若是用同样的字符串去初始化不同是数组会开辟出不同的内存块。因此str1和str2不同而str3和str4相同。

二、数组指针变量

数组指针变量是存放数组的地址,能够指向数组的指针变量,他与我们之前的指针数组不同。

int*p1[10];//指针数组,存放指针的数组int(*p2)[10];//数组指针

p先和*结合,说明p为指针变量,指向的是一个大小为10的整形数组,因为[ ]的优先级要高于 * ,因此()不能省略。
指针数组的初始化需要用到&数组名

int(*pa)=&arr;

三、二维数组传参

二维数组传参形参部分可以写成数组,也可以写成指针的形式。
二维数组我们可以看成是每个元素都是一个一维数组,那么二维数组的数组名就是第一个数组的地址,二维数组传参本质上也传递了地址,传递的是第一个一维数组的地址。

voidtest(inta[3][4]);//数组传参voidtest(int(*p)[4]);//指针传参

四、函数指针变量

函数指针变量是用于存放函数地址,未来能够通过地址调用函数。函数名就是函数的地址,我们可以通过&函数名的方法获得函数的地址。
那么我们要如何创建函数指针变量呢?其实函数指针变量的写法其实和函数指针十分类似。

voidtest(){printf("hello");}void(*pf1)()=&test;void(*pf2)()=test;intAdd(intx,inty){returnx+y;}int(*pf3)(intx,inty)=&Add;int(*pf4)(int,int)=Add;//x和y写或不写都可以//我们可以通过函数指针调用指针指向的函数printf("%d",(*pf3)(1,2));printf("%d",pf3(3,4));

当我们想要用typedef重命名变量时,特别注意数组指针和函数指针的重命名。

typedefint(*parr_t)[5];//数组指针,新类型名写在*右边typedefvoid(*pfun_t)[int];

当我们需要存放多个函数指针的时候,就可以使用函数指针数组。定义如下:

int(*parr1[3])();

该定义的意思是parr1先和[ ]结合表示这个是一个数组,剩下的说明这个数组存放的是int(*)()类型的函数指针。
函数指针数组的用途是可以用于制作转移表,代码如下:

#include<stdio.h>intadd(intx,inty){returnx+y;}intsub(intx,inty){returnx-y;}intmul(intx,inty){returnx*y;}intdiv(intx.inty){returnx/y;}intmain(){intx,y;intinput=1;intret=0;do{printf("**************\n");printf("* 1:add 2:sub *\n");printf("* 3:mul 2:div *\n");printf("* 0:exit *\n");printf("**************\n");printf("请选择:");scanf("%d",&input);switch(input){case1:scanf("%d %d",&x,&y);ret=add(x,y);printf("%d",ret);break;case2:scanf("%d %d",&x,&y);ret=sub(x,y);printf("%d",ret);break;case3:scanf("%d %d",&x,&y);ret=mul(x,y);printf("%d",ret);break;case4:scanf("%d %d",&x,&y);ret=div(x,y);printf("%d",ret);break;case0:printf("退出程序");break;default:printf("输入错误");break;}}while(input);return0;}

使用转移表可以让我们少写一些代码。

#include<stdio.h>intadd(intx,inty){returnx+y;}intsub(intx,inty){returnx-y;}intmul(intx,inty){returnx*y;}intdiv(intx.inty){returnx/y;}intmain(){intx,y;intinput=1;intret=0;int(*parr[5])(int,int)={0,add,sub,mul,div};do{printf("**************\n");printf("* 1:add 2:sub *\n");printf("* 3:mul 2:div *\n");printf("* 0:exit *\n");printf("**************\n");printf("请选择:");scanf("%d",&input);if(input<=4&&input>=1){scanf("%d %d",&x,&y);ret=(*parr[input])(x,y);printf("%d",ret);}ifelse(input==0){printf("程序结束")}else{printf("输入有误")}}while(input);return0;}

总结

以上就是指针(中)的内容,希望能对大家有所帮助。

http://www.jsqmd.com/news/634658/

相关文章:

  • 2026年靠谱的喷涂设备生产商推荐,快速交货与优质服务兼得的选择指南 - 工业设备
  • wan2.1-vae开发者实操:通过curl/API调用wan2.1-vae服务实现程序化图像生成
  • MiniCPM-V-2_6实战体验:手把手教你用Ollama部署最强视觉模型
  • 3个关键场景:UnityPsdImporter如何重构UI资源导入流程
  • 剖析交通事故律师如何选择,权威民事律师哪个口碑好 - 工业推荐榜
  • Pixel Language Portal 数据库课程设计:智能问答与 ER 图生成系统
  • Pixel Epic惊艳效果展示:用16-bit像素风界面完成ESG报告三重验证生成
  • 别再手动造数据了!用Xilinx AXI Traffic Generator IP核的6种模式,轻松搞定FPGA总线验证
  • 成都棉岩板优选采购指南 成都本地厂家推荐成都基地直供 - 深度智识库
  • AIAgent架构分布式部署全链路拆解(从单体到万级QPS的7层分治模型)
  • PP-DocLayoutV3真实效果:手机翻拍文档中弯曲边框与旋转文本联合矫正
  • Alibaba DASD-4B Thinking 对话工具 MATLAB 接口调用探索:科研数据分析助手
  • 从《两只老虎》到报警器:用51单片机+无源蜂鸣器玩转简单音乐与实用报警(附完整KEIL工程)
  • 2026年连续式回转窑哪家好?行业口碑厂家与品牌推荐 - 品牌推荐大师1
  • 揭秘沃尔玛购物卡回收:线上平台帮你轻松兑现余额! - 团团收购物卡回收
  • 追赶法在特殊矩阵求解中的应用:三对角与五对角线性方程组对比
  • 如何3步快速构建精简Windows系统:终极优化方案完全指南
  • Asian Beauty Z-Image Turbo参数详解:CFG Scale/Steps/负面提示词最佳实践
  • ESP32-S3图像处理实战:如何用OV2640摄像头抓图,并在ILI9488屏幕上流畅显示(代码开源)
  • 共话苏州冷源选购,操作方便又靠谱的品牌哪家好 - mypinpai
  • 2026年技术强智能客服系统,口碑系统正规厂商推荐 - 品牌2026
  • STM32F407 IAP升级实战:从Flash分区到串口烧录的保姆级避坑指南
  • 深入链路层:报文 MAC 传输原理与 ARP 欺骗、中间人攻击全解析
  • 盘点2026年性价比高的全铝洗衣柜专业厂家,定制颜色丰富可选 - mypinpai
  • AIAgent多模态交互界面设计:语音+手势+AR眼动的实时融合架构(工业级落地仅剩最后47天窗口期)
  • 解惑PVC输送带厂家靠谱吗,哪家值得优先选择 - myqiye
  • [SDIO] 从波形到代码:深入解析SD卡初始化流程与关键命令(附uboot实战)
  • Unity UI Toolkit实战:5分钟搞定游戏开始菜单(附完整UXML配置)
  • 巨果西西4大盈利渠道,带你抢占2026水果万亿红利 - 博客湾
  • 2026年比较好的餐饮策划设计公司推荐,知名品牌靠谱之选 - myqiye