【学习笔记】【oc】指针

1.取一个变量的值,可通过直接与间接的方式

直接:访问变量  

间接:通过变量的内存地址来获取变量的值。

存放内存地址的变量就是指针变量。

2.定义指针变量的语法:类型* 变量名

&:取地址运算符,取变量的内存地址;(单目运算符)

*:取变量运算符,读取指针所指的变量。

3.对于指针变量,有两个规则:

(1)定义指针变量时,必须用*来标识定义指针变量;

(2)c语言是强类型语言,指针变量需要先定义再使用,而且一旦指定指针的类型,则该指针变量只能指向指定类型的变量。

4.指针可作为函数形参:

#import<Foundation/Foundation.h>

  void swap(int* a,int* b)

{

   int tmp=*a;

    *a=*b;

    *b=tmp

a=b=nil;

}

int main(int argc,char* argv[])

{

@autoreleasepool{

  int m=5;

  int n=9;

  //m,n的值发生对调

  //如果函数参数使用普通变量,m,n的值不受函数的影响

  swap(m,n);

   NSLog(@"%d,%d",m,n);

}

return 0;

}

原因:因为函数传递方式是值传递,直接使用变量的副本。如果函数变量是普通变量,那么函数对变量所做的修改都无法改变变量本身。

   如果函数需要对变量的值进行修改,则需要传入该函数的指针,并在函数中对指针所指的变量值进行修改。

以函数swap(a,b)为例:

指针*a 指向m,取m的值(m=5)赋给tmp,而tmp又将值赋给了指针*b,指针*b代表了n的内存地址,从而改变了n的值(地址传递);

如果形参是普通变量:因为是值传递,使用的是m,n的副本,所以只是单纯的把m,n复制一份给a,b;a,b怎么变都不会来影响m,n。

5.指针与数组

(1)数组的首地址就是数组的地址。

  int arr[];

  &arr[0]=&arr[];

  不能将整数值直接赋值给指针变量。

(2)指针的赋值方式

  int* p;int* pt;int a;

  p=&a;//将a的内存地址赋给p;

  p=&arr[i];//将数组中的某个元素地址赋给p;  

  p=arr;//将数组的首地址赋给p;

  p=pt;//将pt保存的内存地址赋给p;

(3)数组指针的运算

  加减一个整数n:指针的地址加减(n*变量大小个字节);

  当两个指针指向同一个数组时,两指针相减表示 所指的两个数组元素之间相隔的元素个数;

  当两个指针指向同一个数组时,指向前面元素的指针小于指向后面的。

(4)数组变量是指针常量,因为数组地址是不可变的。

6.数组变量作为函数参数:

传入的是指向数值的指针,在函数中对数组元素所做的修改将会影响到原来的数组。

快速排序法:

//

7.字符串与指针

c语言中 用字符数组表示 字符串,所以字符串指针就是指向字符数组首地址的数组指针。

字符串(字符数组),字符指针(指向字符数组的指针)

ps:需要把指针定义成字符型指针。

  字符数组不能重新赋值,只能在定义时赋值;

8.函数与指针

指针也可以表示函数入口

指针指向函数入口步骤:

(1)定义函数指针变量:

   语法:(函数返回值类型*)(函数指针变量名)()

(2)将函数赋值给指针变量:

(3)使用函数指针变量调用函数:

   语法:(*函数指针变量名)(参数);

函数指针作为另一个函数参数:

定义一个函数时,但某些处理逻辑没有确定下来,即部分代码需要动态改变时,可使用函数指针作为参数。

函数指针作为返回类型:

为了保证返回的指针有效,有两种方式:

(1)指向函数中的局部变量时,使用static关键字;

(2)让指针指向暂时不会释放的数据。

9.指针数组

声明指针数组的格式:数据类型 *数组变量名[长度]

注意:类型(* 数组变量)[长度]:表示指向一位数组的指针.

时间: 2024-11-05 12:19:34

【学习笔记】【oc】指针的相关文章

iOS学习笔记---oc语言第六天

Block .数组高级 block本质上就是匿名函数(没有名称的函数) block语法和函数指针很相似 回顾函数 函数:C语?中,实现某一类功能的代码段. 完整的函数包含两部分:函数声明.函数定义 函数声明,即函数原型.例如:int sum(int x,int y);具有两个整型参 数,一个整型返回值的函数. 函数定义,即函数实现.例如:int sum(int x,int y){     retrun x + y;     } 回顾函数指针 函数指针(变量):存放函数地址(函数名)的指针变量.

c++ 11学习笔记--智能指针

C++ 98的 std::auto_ptr已经被彻底遗弃了,取而代之的是unique_ptr.shared_ptr与weak_ptr.大部分时候我们自己手动申请内存方式内存都是没有问题的,问题是如果程序很大了之后,一个复杂的对象,多次拷贝的代价非常高,很多地方都会使用到,只存在一份拷贝显然是最好的,这个时候对象生命周期的管理就会很复杂,所以c++引入了智能指针. 任何事物都会有两面性. Shared_ptr 摘录于Effective C++, 3rd Edition, Item 17: 在 st

学习笔记:指针之C

因为某些原因来好好的将C重新梳理一遍,过去一年也是个渣,好在还能重新来过.将C和指针中指针一节学习了三四次,再将后面的习题做了一做.现在再好好回顾一下.至于对错就不过多评价. 指针的确是C的特点之一,从最初接这玩意就没把它弄的很明白.据说把它真正吃透的人也不多.这也只是我的学习笔记.指针,记得当初C语言老师说的一点,就是地址,其他就没啥印象了.自从自己做题就是记住了这点,指针就是地址,访问相应内存空间的值是间接访问,要用' * ',也叫解引用指针. 通过C和指针这本参考书,我才知道我们是用变量来

iOS学习笔记---oc语言第三天

继承.初始化方法 一.继承 继承的上层:父类  继承的下层:子类 继承是单向的,不能相互继承 继承具有传递性:A继承于B,B继承于C,A具有B和C的特征和行为 子类能继承父类全部的特征和行为(私有变量也继承过来了,只是不能访问) 面向对象提供了继承语法.能大大简化代码,把公共的方法和实例对象写在父类里.子类只需要写自己独有的实例变量和方法即可 继承既能保证类的完整,又能简化代码 继承特点 oc中只允许单继承 没有父类的类称为根类,oc中得根类是NSObject(祖宗) 继承的内容:所有的实例变量

iOS学习笔记---oc语言第五天

字典,数组 ,集排序 一.字典类 存储以下数据 name:张三; sex:男;age:18 film:风暴; playcount:10000次;price:60元 字典类用于保存具有映射关系(key-value对)的数据 对于“name:张三”来讲,key就是“name”,key对应的value是“张 三” 一个key-value对认为是一个元素(实体),字典是存储key-value对 的容器. 特点: 与数组不同,数组靠下标存取数据,数组的下标是唯一的. 字典靠key存取元素.key不能重复,

iOS学习笔记---oc语言第四天

字符串 数组 一.使用苹果帮助文档 学会使?用苹果帮助?文档是开发者的?一项技能 Inherits from 继承?自 Conforms to 遵循什么协议 Framework 属于哪个框架 Availability 什么时候可?用的 Declared in 声明在什么头文件?里 Related documents 相关文档 Sample code ?示例代码 快速打开帮助文档 在代码中,将?鼠标停留在 类名或者?法名上,option+?鼠标左键,点击 Reference的超链接进?入帮助?文档

iOS学习笔记---oc语言第二天

实例变量与方法 一.实例变量的可见度 二.方法 oc中的方法分两种:类方法和实例方法 类方法:只能类使用 eg:+ (id)alloc  注:类方法中不能使用实例变量 实例方法:只能对象使用,eg:- (void)sayHi iOS学习笔记---oc语言第二天

黑马程序员学习笔记-C指针小结

黑马程序员学习笔记-C指针 1. 指针简介: 指针是C语言中非常重要的数据类型,是C语言的精华 2. 指针变量定义: 格式:类名标识符 *指针变量名; 指针变量只能存储地址 指针就一个作用:能够根据一个地址值,访问对应的存储空间 指针变量p前面的int:指针变量只能指向int类型的数据 3.实例: 4. 注意点: 指针变量只能存储地址.指针变量未经初始化,不要拿来间接访问其他存储空间.指针变量的初始化可以int *p = &a;也可以拆分成两句:int *p; p =&a;.定义变量时的*

iOS学习笔记---oc语言第七天

类的扩展 NSDate是Cocoa中用于处理日期和时间的基础类,封装了某一给定的时刻,具体的日期 时间和时区 使用+date方法获取当前日期和时间 1 NSDate *date = [NSDate date];//获取当前时间 2 NSLog(@"%@",date);//无论你是哪个时区的时间,打印的总是o时区的时间 3 NSDate *date2 = [NSDate dateWithTimeIntervalSinceNow:60*60*8];//从现在开始之后的时间 4 NSLog(

黑马程序员学习笔记-OC之foundation框架

黑马程序员学习笔记-OC之foundation框架 1.简介:foundation框架是其它所有ios框架的基础,包含了很多常用类型,结构体.枚举.类等. 2. 结构体:NSRange表示范围的结构体. NSPoint/CGPoint表示坐标点的结构体 NSSize/CGSize表示宽高的结构体 NSRect/CGRect表示坐标点+宽高的结构体 3. 类字符串:NSString  字符串类 NSMUtableString  易变字符串类 NSArray         数组类 NSMUtabl