C语言指针、数组

2016-04-14  本文已影响0人  牛家村的枇杷

指针

        int i = 10;
        int *p;
        p = &i;
        
        NSLog(@"i:%d,p:%p,*p:%d",i,p,*p);

打印结果:

 i:10,p:0x7fff5fbff84c,*p:10

错误示例:

          *p = &i;

*号如果不在声明语句中,而只是右边有表达式的话,表明取*号右边变量中所存地址对应内存中的数据(取值、指针运算符)

p是int*类型(一个指向int的指针)
*是这个变量类型名称的一部分(当需要这种类型的变量p,应该这样写:(int*)p)

        NSString *s = @"This is a string";

在纯粹的C语言中,声明指向整形的指针为p,在代码中更倾向于写成 *p
声明之外的意思是:指针p指向的对象
写成*p是因为希望访问指针所指向的整形变量,这就是所谓的指针的解引用(dereferencing)

而在Objective-C中,将指向对象的指针视为对象,这样就永远不能解引用。
如已声明指向NSString的指针s,我们不会使用*s,而是直接使用s,就好像它是字符串一样。在OC语言中处理对象时更倾向于使用指针,而不是指针指向的对象。在后台OC语言会处理好凌乱的事务,会监视指针指向的内存,处理内存必要的操作。这对程序员来说很便利,却会导致代码松散。我们更倾向于说"s是一个NSString",实际上它是一个指向NSString的指针。

        char *c;
        double *d;

"数据类型"为该指针变量所存储的指针指向的存储单元中的数据的类型。

上一篇 下一篇

猜你喜欢

热点阅读