oc中的指针(一)

谈到c语言,不得不提指针,有多少英雄好汉栽在指真上。利用指计可以很方便的使用数组和字符串(C#中的String类型就是引用类型,也就是指针类型)。指针支持动态分配内存,可以让程序更简介,提高效率。

“要想精确打击,就要人工引导”---军旅剧中导弹兵经常会这样说,指针类似于人工引导的坐标。灵活,易用,同时也很复杂,引导错误就是毁灭性的打击。举个栗子:移动大厦一层有10个方间,编号依次是1-10.其中2号给A公司租用,5-8给公司租用。以每个房间的编号第一个为公司的地址。如果我们要给A公司送快递,那就是给地址为2的公司送快递。如果给B公司送快递就是给地址为5的公司送快递;

同样,在编程中系统为了管理内存,给内存中的每一个字节都设一个编号。所有变量在内存中要战胜一个或几个连续的字节。其中第一个字节就是该变量的地址。若有INT 类型的A,编译时系统会为A分配两个字节的存储单元。假设这两个字节的编号分别为:001002那边A的地址就是001;

  • 类型* 变量名;---定义指针
  • &取地址运算符,后面会紧跟一个变量,用来读取变量的保存地址;
  • *:取变量的运算符。用于读取该指针变的值;
//
//  main.m
//  ZhiZhen
//
//  Created by 程英暾 on 2017/3/21.
//  Copyright  2017年 程英暾. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
int a=10;//变量
int* b;//指针类型的b
b=&a;//将A的地址给B,也可以说B代表A的地址
NSLog(@"打印指针B所指向的地址中的值:%d",*b);//打印指针中所指向a的值
*b=20;//给指针赋值,也就是通过B给变理A赋值
NSLog(@"a的值已经改变,其值为:%d",a);//a的值改变了
}//@autoreOVER
return 0;
}

--------------------result--------------------

2017-03-21 22:20:29.835850 ZhiZhen[8931:355806] 打印指针B所指向的地址中的值:10

2017-03-21 22:20:29.836091 ZhiZhen[8931:355806] a的值已经改变,其值为:20

时间: 2024-10-09 21:50:49

oc中的指针(一)的相关文章

智能指针 与 oc中的指针

智能指针 与 oc中的指针 智能指针的原理及实现 当类中有指针成员时,一般有两种方式来管理指针成员:一是采用值型的方式管理,每个类对象都保留一份指针指向的对象的拷贝:另一种更优雅的方式是使用智能指针,从而实现指针指向的对象的共享. 智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count).智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针. 每次创建类的新对象时,初始化指针并将引用计数置为1:当对象作为另一对象的副

OC中的指针

NSError *err = nil; NSError __strong **error = &err; //因为在oc中,通过* *err 创建的指针是用__strong修改的,所以要一致,NSError __strong(需要在前面加上) **error NSError __autoreleasing *errO = nil; NSError __autoreleasing * *errorO = &errO; //因为在oc中,通过 *err 创建的指针是用__autoreleasi

OC中的野指针(僵尸指针)

涉及到内存管理问题的都是类类型的变量,而在OC中我们操纵这些对象都是通过操纵指向他们的指针来完成的,一致很多时候会忽略指针存在.比如定义UIView * view = [[UIView alloc]init];然后我们会使用view这个指针来做许多的操作.而由指针带来的一个性质是,当view == nil的时候,是指view这个指针没有指向任何地方,不能代表view指向地方的值是空的.同样当view不为nil的时候,值说明它指向了一个地方,而不能说明它指向的地方有值.僵尸指针就是这样情况,比如:

关于void*类型的用法(相当于OC中的id类型)

关于void*类型的用法(相当于OC中的id类型) 1.C++语言在对于void* 类型的使用很特别,因为void* 可以间接引用任何其他数据类型的指针,比如int*.float*甚至抽象数据类型的指针,而且可以从void* 强制转换为任何其他数据类型的指针,所以使用起来有时候会比较危险.如果开始将一个void*的指针间接引用一个float*的指针,然后将这个void*指针强制转化为一个int*类型的指针,编译器不会给出错误甚至警告,但是输出的数据却匪夷所思,如果再强制转换会float*则不会出

OC中self的用法

self :用法 OC中self可代表类和对象 Self是一个指针,谁调用了当前方法,self就指向谁 [出现在对象方法中,就代表着当前对象,出现在类方法中,就代表着当前类] Self的用途: (1)可以利用self->成员变量名访问当前对象内部的成员变量(仅在对象方法中) (2)[self 方法名]:可以调用其他的对象方法或者是类方法

【《Objective-C基础教程 》笔记ch05】(六)OC中的复合机制Composition

 1.复合通过包含作为实例变量的的对象指针实现的.        @interface Unicycle : NSObject        {           Pedal*pedal;           Tire*tire;         }//Pedal和tire通过复合的方式组成了Unicycle 2.存取方法--用来读取或者改变某个对象属性的方法. #import <Foundation/Foundation.h> @interface Car : NSObject { Eng

【《Objective-C基础教程 》笔记ch04】(五)OC中的继承inheritance机制

一.为什么需要继承 使用继承一方面继承了父类的特性,另一方便解决了重复代码维护问题. 二.继承之语法 1. @interface 子类名:父类名 2. OC只支持单继承,不支持继承多个父类. 3. 重构--移植和优化代码. 三. 继承的工作机制 1. 方法调度 子类拥有一个指向它父类的引用指针,消息传递时,OC的方法调度机制使用该信息来找到正确的实现方法,查找过程是现在子类中找,找不到再到父类中继续找. 2. 实例变量 1)继承实例源码 @interface Shape : NSObject {

oc中的oop基础及类的基本介绍

面向对象的(OOP)的基础知识 类(class):表示一组对象数据的结构体,对象通类来得到自身.类名首字母大写. 对象(objcet):是一种包含值和指向其类的隐藏指针的结构体.运行中的程序中通常会有n个对象,首字母不用大写. 实例(instance):是对对象的另一种称呼. 消息(message):是对象执行的操作,用于通知对象去做什么.对象接收到消息后,将查询相应的类,来执行正确的代码运行程序. 方法(method):j是为响应消息而运行的代码,这个以后在oop中会很常用.根据类的对象或消息

OC中的类簇的使用和初始化方法中属性的使用

今天遇到了几个和字符串相关的内存问题,和大家分享一下 NSString *name = [[NSString alloc]initWithString:@"张三"];NSLog(@"%d",[name retainCount]); 这两行代码的打印结果是-1, NSString * aString = [[NSString alloc] initWithFormat:@"123"]; NSLog(@"%d",aString.r