iOS开发学习笔记 2-4 C语言部分 指针

[Object-C语言随笔之一]Mac os 下搭建iOS开发环境 李华明Himi 原创,转载务必在明显处注明:转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-object/391.html   从这一章开始,Himi将一步一步的带大家走进Iphone4的开发,当然开发语言则不再是Java,而是Objective-C,简单来说是C的变种语言;有一定的其他语言基础的童鞋可以说学习很快,那么在[Object- 阅读详情
      计算机有一系列连续编号或者编址的存储单元(通常所说的内存),这些存储单元可以单个进行操作,也可以以连续成组的方式进行操纵。指针是能够存放一个地址的一组存储单元,指针指的就是内存地址,通常是4个(32位机器)或者8个(64位机器)字节。
     
     1.指针是引用数据类型,因为本身没有保存数据,只是保存了数据的地址,间接的找到内存中的数据。
     1-1、&,取地址运算符,用于获取一个对象的地址。
     例如,p = &i,是把变量i的地址赋值给p;
      1-2、*,间接寻址运算符,当*作用于指针时,表示访问指针所指向的对象。 
     例如,j = *p,表示把指针p所指向的对象赋值给访问j,相当于j = i;
     1-2、&和*的优先级比算术运算符高,所以: &、*  > 算术运算符 > 关系运算符 > 相等性运算符 > 逻辑运算符
     例如,++*p等价于(*p)++

     3、指针变量,保存指针的变量;
     
     4、申明一个指针变量
     int* p
     int,int表示该指针变量指向的对象的数据类型是int型;
     *,在申明指针变量时用来表示这是一个指针类型的变量;
     p,指针变量名,存放对象的地址。
     
     5、指针的用法
     5-1、指针可以作为参数,传递变量的地址,相当于多个函数参数共享该变量的地址。
     值传递:将变量复制一份,相当于两个变量
     地址传递:相当于同一个变量,拥有相同的内存区域(地址)
     5-2、指针可以作为返回值,但是不要返回自动变量,因为局部变量的生命周期为函数开始到函数结束,当函数结束后,局部变量会自动销毁,此时返回的指针所指向的对象便不存在了,会导致野指针问题。
     5-3、指针可以运算,进行加整数、减整数、指针的比较和相减,但运算的单位由指针的类型决定
     例如,int类型指针+1,地址偏移量为4,因为int类型占4个字节;
                 char类型指针+1,地址便宜量为1,因为char类型站1个字节;

     6、指针的优点
     6-1、高效的参数传递,在函数的参数传递过程中,实参复制一份传递给形参,复制过程中需要消耗一定的资源,这时如果选择使用指针传递参数的地址,就有非常大的优势。
     6-2、对动态分配内存的支持,通过指针对动态开辟的内存空间进行访问,并通过指针实现内存的释放和回收。
     6-3、对链表的支持,指针是将链表结构中不连续的内存地址形成链的关键。
     
     7、指针可能带来的问题
     7-1、指针未初始化,在C语言中不会对指针指向空间的内容进行检查,如果指针没有初始化,使用该指针可能导致无法预测的后果,比如指针指向一块随机的内存区域。
     7-2、局部变量被回收,引起的野指针问题。当指针指向一个局部变量时,当一个函数运行结束后系统便自动销毁了局部变量并回收其内存空间,此时指针便指向了一个不存在的空间,形成野指针问题。
     7-3、指针改变引起内存泄露,例如:
int *p = malloc(sizeof(int) * 5);//分配5个sizeof(int)大小的地址
int i = 1;
p = &i;
     这段代码中,指针p首先指向由malloc()函数开辟的内存空间,随后p又被赋值为int变量i的地址,一开始由malloc()函数开辟的内存空间变再也无法访问,也无法释放,从而引起内存泄漏。
     7-4、指针越界,访问数组时超过数组边界引起程序异常终止。

IOS成长中 C语言之函数指针 知识点概括:                  1. 阅读详情

相关推荐

c语言:我眼中的指针(教你彻底认识指针)

c语言:我眼中的指针(教你彻底认识指针) 我眼中的指针 c语言:我眼中的指针(教你彻底认识指针)

彻底攻克C语言指针

前面我们讲解了指针数组、二维数组指针、函数指针等几种较为复杂的指针,它们的定义形式分别是: int*p1[6];//指针数组 int*(p2[6]);//指针数组,和上面的形式等价 int(*p3)[6];//二维数组指针 int(*p4)(int,int);//函数指针 我相信大部分初学者对上面几种形式的指针都非常迷惑,不知道该从...

387

Android Geckoview实战:5分钟搞定JS与原生交互(附完整Demo代码)

本文详细介绍了在Android应用中使用GeckoView替代系统WebView,构建稳定高效的JavaScript与原生代码交互桥梁的实战方法。通过WebExtension架构,文章提供了从环境配置、扩展开发到Android端集成的完整步骤,并附有可运行的Demo代码,帮助开发者快速解决混合应用中的兼容性问题。

u5v6w7的博客 933

一文学会C语言指针,从此再不怕指针

具体结果就是值,明确知道等于多少的就是值。 存储这些值的地方,就是变量,就是在程序中用来指代某片存储空间的名称,值就是存储空间里面的具体内容。 #include<stdio.h> int main(){ int a; scanf("%d",&a); int *p=&a; return 0; } 输入流中,输入的是a的地址,a地址的类型是就是一个指针。 为啥叫指针,因为指针变量定义完之后,里面存的是另外一个变量的地址 指针变量是指向另外一个变量的 指针声明: 类型后加*

凯凯王的技术生涯 512

OpenCode:终端开源AI编程助手,多模型接入与实战指南

AI编程助手正在从IDE侧边栏走向终端环境。其核心原理是让模型直接读取项目文件、执行命令、查看报错,形成从诊断到修复的完整闭环,从而解决传统插件上下文割裂的问题。技术价值在于开源透明、模型无关,既可接入OpenAI等云端服务,也能通过Ollama连接本地模型,兼顾数据安全与离线场景。在工程实践中,它适用于长时间驻留项目、自动修Bug、团队统一AI工具链等需求。OpenCode正是这样一款终端AI助手,支持灵活配置第三方API密钥,提供免费档与Go套餐,并通过Skills技能系统让模型遵循标准操作流程。同时,

weixin_28745821的博客 326

告别ROS1思维:在ROS2 Humble上,用Python搞定MoveIt2机械臂控制的完整流程

本文详细介绍了在ROS2 Humble环境下使用Python控制MoveIt2机械臂的完整流程。从环境配置、架构变革到实战操作,涵盖URDF适配、Action接口编程及性能优化技巧,帮助开发者高效迁移ROS1项目至ROS2平台,实现工业级机械臂控制。

weixin_30352645的博客 449

C指针学习之理解

当在写C代码时,定义一个变量,就相当于是向内存申请了一段存储空间;操作系统为了管理内存,给这些内存分配了一个编号,这个编号就称为地址。而指针变量,存放的就是变量的地址,因此当修改变量的值时,相当于还是在这个地址中修改内存的值;而当修改指针变量的值时;相当于又新添加了个地址。具体代码如下: # include int main(void) { int * p; //p是变量的名字,

sanjie1993的博客 401

手把手教你用Matlab搞定GRACE RL06数据读取:冯伟老师工具箱无GUI版实战

本文详细介绍了如何使用Matlab处理GRACE RL06数据,重点解析了冯伟教授工具箱的无GUI版实战操作。通过环境配置、核心函数改造和批处理技巧,帮助科研工作者高效完成重力场数据的读取与分析,特别适合服务器集群环境下的批量处理需求。

weixin_29313817的博客 200

C语言指针

内存区的每一个字节有一个编号,这就是地址。在C语言中,访问元素有直接访问和间接访问两种方式直接访问如a=5;    系统在编译时,已经对变量分配了地址,例如,若变量a分配的地址是2000,则该语句的作用就是把常数5保存到地址为2000的单元间接访问如:scanf("%d",&amp;a)   调用函数时,把变量a的地址传递给函数scanf,函数首先把地址保存到一个单元中,然后把从键盘接收到的数据通...

凯凯王的技术生涯 477

电源新手别怕!手把手教你搞定Buck电路的环路补偿(附Type II/III补偿器参数计算)

本文为电源设计新手详细解析Buck电路环路补偿技术,重点介绍Type II和Type III补偿器的参数计算与设计方法。通过实例演示和实用技巧,帮助工程师快速掌握环路补偿原理,解决电源振荡、响应慢等问题,提升电路稳定性与性能。

weixin_30607029的博客 616

硬件级Dalvik字节码粒度无痕HOOK及VMP取址码定位分析

2.通过硬件读写断点的输出信息 可知pc寄存器就是art解释器的取码地址 直接硬件执行断点在这个pc 即可直接trace所有的smali执行流 通杀所有机型系统。本文即将探讨的是 如何在硬件级别实现dalvik bytecode粒度的无痕拦截技术 并实现鼠标点击一键hook 指哪儿打哪儿 感受 button power 的强大魅力!4.由于硬件断点是同步的 断下后可随时硬件dump下这一瞬间的app内存映像 写入unicorn的内存模拟执行。解释器在解释执行前必会读取内存中的bytecode。

2503_90751789的博客 1085

C语言的iOS开发

综上所述,C语言在iOS开发中仍具有重要的地位和应用场景。从历史渊源到现今的实际应用,C语言为iOS开发提供了基础。尽管现代的iOS开发越来越倾向于使用Swift和Objective-C,但C语言的高性能、灵活性和可移植性使其在特定领域依然不可或缺。开发者应该掌握C语言,并灵活运用,使其成为提高iOS应用性能的重要工具。通过不断学习和实践,可以在这条技术道路上走得更远,创造出更加优秀的应用。

2501_91313831的博客 463

【Burp入门第三十七篇】AutoRepeater插件安装使用教程+越权实战案例

AutoRepeater 通过接收满足特定条件的请求,按照预设的基础替换规则对请求进行处理。在接收到匹配请求后,它首先应用基础替换,然后针对每个定义的替换创建请求副本并应用该替换操作,从而实现对不同参数的修改和请求的重复发送,以此来全面检测 Web 应用的授权情况。1、自动化请求重复:能自动复制、修改并重发 HTTP 请求,避免了手动重复操作的繁琐,大大提高了 Web 应用授权测试的效率。2、灵活参数替换:可灵活改变邮箱地址、账号身份、角色、URL 和 CSRF 令牌等关键参数。

等风来 2033

iOS开发分分钟搞定C语言—— 字符串和指针

指针

IOS_龙的博客 1656

影楼精修-高低频磨皮算法解析

本文介绍了像素蛋糕软件中的高低频磨皮算法原理及实现思路,抛砖引玉。

Trent1985的专栏 2254

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

系列:iOS开发-C语言基础

系列:iOS开发-C语言基础之前也说了iOS中的OC是扩充C的面向对象编程语言 那么无论是从什么角度来说都要首先回顾一下C的内容,虽然很多人在大学的时候都有学习过C语言,一提到谭浩强,我估计90%的人都熟悉,至于为什么,我也不知道... 首先科普一下C部分的介绍:C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行

spicyShrimp的博客 1075

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

用c语言开发一个安卓APP,c语言开发的app-用c语言可以开发app吗

通常,IOS应用使用C ++和对象的C,以写的,但到的xcode通过该程序。您可以写信给重用OC,A应用程序也可以用一个OC C ++结合起来写,我读了一外地开发商说,代码app1000行,他开发800是C ++,200条OC 。电话软件c编程语言都可以用来C4droid,使用GCC /克++编译器。手机当前使用的编程是最大的。WINTC简繁双语版WINDOWS平台的开发工具。学习C用好,支持中国...

weixin_31809171的博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

iOS开发学习笔记 2-9 C语言部分 内存分配函数 函数指针 指针函数 void*

一、内存分配函数 1、void * malloc(参数(需要分配的内存空间的大小)); void * malloc(参数1(元素所占用空间大小) * 参数2(元素个数)); 不会进行清零操作 2、void * calloc (参数1(元素个数), 参数2(每个元素所占用空间大小)); 会进行清零操作 3、void * realloc(参数1(需要再次分配内存空间

BobooO的专栏 1681

c语言的程序怎么安装在ios,iOS开发基础之C语言

为何学习iOS开发要先学C语言呢,学习c语言对ios开发有何作用。现在越来越多的iOS开发兴趣爱好者投入到了iOS培训中,有的是已经在职的员工,有的是还在就读的学生,还有一些是完全零基础的同学,那么对于他们来说就要一切从基础开始学,首先从C语言学起。因为C语言是一门语言基础,因具备简洁、灵活等特点而被广泛应用,在多种开发环境中都起着重要作用。那么,为什么学习iOS开发要先学C语言呢?因为在iOS开...

weixin_42501631的博客 445

从C语言开始搞iOS开发

为什么学习iOS开发之前要从C语言开始学起?

IOS_龙的博客 331

ios的c语言,iOS基础之C语言部分

1. C语言初探程序运行过程预处理(Pre-Processing) : 预编译过程主要处理那些源代码文件中以”#”开始的预编译指令。"#define"指令:处理条件预编译指令,比如"#if"、"#ifdef"、"#elif"、"#else"、"#endif",将所有的"#define"删除展开所有的宏定义。 "#include"预编译指令 : 将被包含的文件插入到该预处理指令位置。这是一个递归过程...

weixin_29281941的博客 783

iOS开发-C语言-指针

一、指针的概念 1、什么是地址? 内存地址──内存中存储单元的编号 (1)计算机硬件系统的内部存储器中,拥有大量的存储单元(容量为1字节)。为了方便管理, 必须为每一个存储单元编号,这个编号就是存储单元的“地址”。每个存储单元都有一个惟一的 地址。 注意:内存单元的地址与内存单元中的数据是两个完全不同的概念

iOS开发之C语言,OC基础 515

ios c语言函数调用函数指针,iOS学习之C语言函数指针

通过函数名调用函数:int max = maxValue(4, 5);printf("max = %d\n", max);函数类型:int (int, int)1.定义函数指针int *p = NULL;函数类型:int (int, int)函数指针的类型:int (*)(int, int)p是函数指针变量名int (*p)(int, int) = NULL;2.给函数指针赋值(使用函数首地址)函...

weixin_42439808的博客 429

ios c语言指针的指针,iOS开发 -- C语言基础10(指针和字符串)

iOS开发 -- C语言基础10(指针和字符串)字符串回顾一个字符串由一个或多个字符组成,因此我们可以用字符数组来存放字符串,不过在数组的尾部要加上一个空字符'\0'。char s[] = "mj";上面的代码定义了一个字符数组s来存储字符串"mj",系统会自动在尾部加上一个空字符'\0'。内存分布大致如下图所示:从上一篇文章《指向一维数组元素的指针》中可以看出指针和数组的关系非常密切,因此我们也...

weixin_39811036的博客 195

ios是c语言写的,iOS如何用C语言做开发

续了一年多的长发,一直以“头可断、血可流,头型不能乱”为终生奋斗目标的我,于18日上午10时被理发师无情的“削”短了,看着镜子里的自己心里有种莫名其妙的“伤感”跟了我一年多的长发在理发师的剪刀飞舞下,纷纷快速逃离了我的脑袋瓜!真蛋疼不抒情了!打好C语言基础,对于学习iOS开发很有帮助,英语可以不好,看懂26个字母即可,当然不是说英语好就不行(较真你就输了),英语好优势肯定大大的,在看一些国外的技术...

weixin_39933336的博客 394
上一篇: iOS开发学习笔记 2-3 C语言部分 控制流
下一篇: iOS开发学习笔记 2-5 C语言部分 数组
BobooO
博客等级 码龄18年 29粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值