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

【C】零基础教我学会c语言(十二)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、void指针
  • 二.二级指针
  • 三.指针数组
  • 四.数组指针
  • 五.二维数组传参
    • 1.二维整型数组的传参
  • 总结

前言

难死我了


提示:以下是本篇文章正文内容,下面案例可供参考

一、void指针

主要用于存放内存空间地址
也用于函数传参,不同类型的指针可以通过转换为 void* 传参
(void* 就是设置一个没有类型的地址,里面可以放任何类型的数据)

//将内存地址为0x12345678的空间赋值为0x11223344*((int*)((void*)0x12345678)=0x11223344;

二.二级指针

函数体内想修改函数体外指针变量值的时候,需要传递指针变量的地址,即二级指针

C语言指针数组传参需要传二级指针和长度

inta=100;int*p=NULL;int**q=NULL;p=&a;q=&p;printf("&a:%p\n",&a);//a的地址printf("&p:%p\n",&p);//存放p这个指针的地址printf("&q:%p\n",&q);//存放q这个指针的地址printf("=========================\n");printf("q = %p\n",q);//q放的是p的地址printf("p = %p\n",p);//p放的是a的地址printf("a = %d\n",a);//a的值,即100printf("=========================\n");printf("*q = %p\n",*q);//取q的值,即为p的地址printf("*p = %d\n",*p);//取p的值即a的地址printf("=========================\n");printf("**q = %d\n",**q);//取*q的值,即p所存的地址的值,即为a的值100

三.指针数组

本质上为一个数组,里面的数据类型为指针
定义:int *a[5]

定义数组a里有5个元素,占40个字节空间,每个元素都是int *型 C语言中字符串存储用字符型数组,操作字符串用指针 字符串数组的存储用二维字符型数组,操作字符串用指针数组

四.数组指针

本质上是指针,指向一个数组
定义:nt a[5] = {1, 2, 3, 4, 5}; int (*p)[5];

1.定义数组指针变量p,占8个字节空间,指向20个字节的指针

2.一维数组的数组名a,是指向数组第一个元素的指针常量,a可以理解为int *型,除以下2种情况
(1)sizeof运算时
对一维数组数组名&时,值不变,类型为指向整个数组的指针地址,就应该是元素总数*步长

a:数组第一个元素的首地址
&a:数组的首地址

(2)数组指针取*,值不变,类型为指向数组第一个元素的指针地址
都是指地址哦

五.二维数组传参

1.二维整型数组的传参

(1)传数组名和第一维长度(行)
int fun(int (*parray)[3], int len);
(这里的【3】指3列哦)
(2)在函数里的用法和在主函数里数组的用法是一模一样的,不用变换

二维数组和指针的关系

inta[2][3]={1,2,3,4,5,6};int*p=NULL;int(*q)[3]=NULL;p=&a[0][0];p=a[0];p=*a;q=a;a:指向数组一行元素的数组指针 a[0]:指向第一行第一个元素的指针 a[1]:指向第二行第一个元素的指针 访问第m行第n列元素的方式: a[m][n]*(a[m]+n)//加步长取值*(*(a+m)+n)//a加步长(一次加一列)先到m再加步长取值*(p+m*N+n)//p就是a0,a0一次加一个,先到m行再加步长取值*(*(q+m)+n)//q是a,一次加一列*(q[m]+n)//qm就是第m行q[m][n]//与a【m】【n】等价

总结

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

相关文章:

  • 视频孪生无法支撑的“实战化”应用:镜像视界实景仿真自主闭环决策,一键下发石化应急指令
  • 基于VLLM框架本地部署DeepSeek大模型:从环境搭建到API调用的完整指南
  • 学工系统对接一卡通和门禁,学校需要注意哪些事情?
  • MFC双显时钟项目实战:从消息驱动到GDI绘制的Windows桌面开发
  • DoIP协议核心报文类型解析:从车辆发现到诊断路由的通信逻辑
  • Python数据管道实战:抓取与分析Spotify与Billboard音乐榜单数据
  • AI 智能体落地难?这套低代码融合方案,打通业务系统最后一公里
  • 告别机械重复办公,OpenClaw 本地 AI 自动化落地全步骤详解
  • FGO自动化脚本深度解析:基于Python图像识别的智能战斗系统
  • 下载 | Windows Server 2022官方原版ISO映像!(7月更新、标准版、数据中心版、20348.5386)
  • 【2027最新】基于SpringBoot+Vue的web酒店客房管理系统管理系统源码+MyBatis+MySQL
  • 如何用QtScrcpy实现PC端无缝操控Android设备:打破屏幕界限的终极解决方案
  • 远程控制桌面软件有哪些 手机怎么远程控制电脑
  • 商用机器人活动完整实施指南:商场巡游导览、编队表演技术与落地案例
  • Unity协程WaitForEndOfFrame:核心机制、5大应用技巧与性能优化全解析
  • 企业AI订制到底值不值得做?
  • Docker容器架构与核心组件深度解析
  • VRChat Creator Companion (VCC) 从入门到精通:手把手构建你的第一个虚拟形象
  • 从Godot官方示例入门游戏开发:拆解五大核心模块实战指南
  • Nmap扫描策略深度解析:从SYN到隐蔽扫描的实战决策指南
  • 如何用开源内容管理工具优雅备份你的小红书数字资产?
  • 别再用正则硬扛了!用语义沙箱+上下文签名+动态策略引擎构建AI原生防御(附开源PoC代码库)
  • 3D模型文件格式全解析:从STL到glTF,10种主流格式与转换实战指南
  • D2000 核心板天脉 3 系统下 PCIe 驱动调试避坑指南
  • LAV Filters完全指南:5步打造Windows完美视频播放体验
  • OpenClaw停用后生物信息学AI工作流替代方案全解析
  • CAN FD协议深度解析:从原理到实战的网络升级指南
  • Unity场景构建精度控制:步移与顶点吸附的实战指南
  • 第七节 进程间的通信
  • 计算机毕业设计之大学生求职招聘微信小程序