oc之指针

1、基础

* : 简接寻址运算符

& : 地址运算符

int count = 10;  //定义变量count,赋初始值10;

int *intPtr;        //*定义变量inPtr是int的指针类型

intPtr = &count; //表达式&count表示变量count的指针,将它赋值给指针变量intPtr

int x = *intPtr;   //讲intPtr间接指向的值赋给变量x。 如果改变x的值,那么count会发生变化吗? x=12;count=?

代码:

#import<Foundation/Foundation.h>

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

{

  @autoreleasepool

  {

    char c = ‘Q‘;

    char *charPtr = &c;

    NSLog(@"%c %c", c, *charPtr);

    c=‘/‘;

    NSLog(@"%c %c", c, *charPtr);

    *charPtr=‘(‘;

    NSLog(@"%c %c", c, *charPtr);

  }

  return 0;

}

输出结果:

Q Q

/ /

( (

2、指针和结构  

struct date

{

  int month;

  int day;

  int year;

};

struct date todayDate;

struct date *datePtr;

datePtr=&todayDate;

(*datePtr).day=21;//将datePtr指向的date结构中的day成员设置为21.

-> : 结构指针运算符

(*x).y 可以表示为 x->y

datePtr->day=21;

(float)l/s--->类型转换的优先级比运算符的优先级高;

(*datePtr).day=21---->结构成员节点运算符(.)比简接寻址运算符(*)的优先级高

3、指针、方法和函数

#import<Foundation/Foundation.h>

void exchange(int *pint1, int *pint2)

{

  int temp;

  temp = *pint1;

  *pint1 = *pint2;

  *pint2 = temp;

}

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

{

  @autoreleasepool

  {

    void exchange(int *pint1, int *pint2);

    int i1=5, i2=66, *p1=&i1, *p2=&i2;

    NSLog(@"i1=%i ,i2=%i", i1, i2);  //输出结果:5,66

    exchange(p1, p2);

    NSLog(@"i1=%i ,i2=%i", i1, i2);  //输出结果:66,5

    exchange(&i1, &i2);

    NSLog(@"i1=%i ,i2=%i", i1, i2);  //输出结果:5,66

    exchange(*p1,*p2);

    NSLog(@"i1=%i ,i2=%i", i1, i2);  //输出结果:?????   

  }

  return 0;

}

4、指针和数组

1) .定义一个指向100个整数的数组valuesd的指针: int *valuesPtr;

2) .将valuesPtr设为指向数组values的第一个元素的指针:(1)valuesPtr=values; //oc编译器将没有下标的数组名称看做是指向数组的第一个元素的指针

                             (2)valuesPtr=&values[0];

3) .通过valuesPtr引用values[3] : *(valuesPtr+3);

4) .讲values[10]设为27: values[10]=27;  *(valuesPztr+10)=27;

5) .可运用自增和自减运算符: char *p; ++p;--p;

oc之指针

时间: 2024-10-25 15:43:21

oc之指针的相关文章

黑马程序员 OC self指针

当调用对象方法时,编译器都会默认传入一个指向本对象的指针.所以不同的对象都会调用到正确的成员变量.这个指针就是self,它的值就是new时在堆中分配内存的首地址.那么这个self在方法调用时是存储在栈中么?上代码调试来看一下 #import <Foundation/Foundation.h> @interface Person : NSObject { int _age; } - (void)setAge:(int)age; - (int)age; - (void)test:(int)age;

【学习笔记】【oc】指针

1.取一个变量的值,可通过直接与间接的方式 直接:访问变量 间接:通过变量的内存地址来获取变量的值. 存放内存地址的变量就是指针变量. 2.定义指针变量的语法:类型* 变量名 &:取地址运算符,取变量的内存地址:(单目运算符) *:取变量运算符,读取指针所指的变量. 3.对于指针变量,有两个规则: (1)定义指针变量时,必须用*来标识定义指针变量: (2)c语言是强类型语言,指针变量需要先定义再使用,而且一旦指定指针的类型,则该指针变量只能指向指定类型的变量. 4.指针可作为函数形参: #imp

oc学习之路----多级指针的使用和内存分析

---恢复内容开始--- 精髓:要熟悉指针的使用,首先要熟悉指针的各种状态存得是什么数据.(以一级指针 int *p1 二级指针:int **p2 三级指针:int ***p3为例) 一级指针:*p1 取得是目标存储空间的值  p2取得的是目标存储空间的存储地址,&p1取得是当前存储空间的存储地址, 二级指针使用: #include <stdio.h> void change3(int **p2){ int ***d3 = d2; ***d3 = 60 } void change2(i

C C++ OC指针常量和常量指针区别

看Effective Objective-C 2.0  编写高质量iOS与OS X代码的52个有效方法这本书的时候看到有一个说多用类型常量,少用#define预处理指令 ,在这里面有说到指针常量,之前学C C++的时候也遇到过, 现在算是将这些小结. 最重要的一句秘诀就是:*(指针)   const(常量)  谁在前先读谁,谁在前谁不允许改变. 下面是C C++ OC中的例子,其中在OC中指针常量只能赋值一次,不能改变 #import <Foundation/Foundation.h> int

OC语言基础

.h(头文件) .m(源文件c.oc) .mm(源文件c.oc.c++) gcc -c      -o    汇编 -framework Foundation链接  NS开头 字符串对象加@ oc中完全兼容c的函数库 NSLog可以自动换行,并且提供文件名编译时间等 需要包含头文件,每一个框架都有一个主头文件,其名字和主头文件相同,主头文件包含了这个框架的所有头文件. #import可以自动防止头文件重复包含. 链接时,需要手动连接框架. 10.多文件编译:所有对象都是以指针形式存在:跟c类似.

OC基础之类和对象基础知识

类的作用: 允许我们自定义一个新的数据类型,  这个数据类型的变量中是由多个小变量和行为联     合而成的 类的本质: 自定义的一种数据类型. 但是类本身仅仅是创建的一个新的数据类型, 并不能够直接拿来使用 属性: 是在创建对象的时候, 跟随对象一创建在其中, 属性是属于对象的 1. 内存存储和类在内存中的存储 1. 内存中的五大区域 2. 类加载: 当我们创建对象的时候, 肯定需要访问这个类, 因为只有访问了类才知道类中有哪些成员. 就算只是声明了一个类指针, 也是会访问这个类的, 以确定这

016-类与对象-OC笔记

学习目标 1.[理解]对象在内存中的存储 2.[理解]nil和NULL 3.[了解]#pragma mark分组导航标记 4.[理解]方法与函数 5.[掌握]多文件开发 6.[掌握]对象和方法 7.[掌握]对象和属性 一.对象在内存中的存储 类加载: 当程序启动时,会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法,而且只会调用一次.并且类一旦加载到内存,就不会被回收,直到程序结束的时候才会被回收.这个过程就叫做类加载. 当第一次使用某个类创建对象的时候,就会调用当前类的+

iOS9基础知识(OC)笔记

1月16日 Objective  C(20世纪80年代初) 一.OC语言概述 1.1985年,Steve  Jobs成立了NeXT公司 2.1996年,12月20日,苹果公司宣布收购了NeXT  software 公  司,NEXTSTEP环境为apple公司下主要开发.发行操作 系统OSX的基础,这个开发环境的版本被苹果公司命名为 Cocoa(可可)框架             NSString  NS=NEXTSTEP 3.Cocoa框架  (Cocoa  Touc

黑马程序员--oc基础第五篇

五.oc的语法基础(内存管理上) 1.引用计数器:在每一个对象里都有一个引用计数器,占用4个字节的空间,在一个对象创建时引用计数器的值初始化为1. *给对象发送一条retain消息,可以使引用计数器的值+1(retain方法返回对象本身) *给对象发一条release消息,则计数器的值-1 *可以给对象发送retaincount消息来获取当前引用计数器的值 *当一个对象被销毁时,系统会自动向对象发送一条dealloc消息,就像遗言一样,可以对他进行改写,一但改写就必须调用[super deall