首页 > 代码库 > oc之指针

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;