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之指针