Objective-C 数组的指针

  • 数组的指针

    除非您通读与Objective-C中的指针相关的章节,否则您很可能不会理解本章。因此,假设您对Objective-C编程语言的指针有一点了解,那么让我们开始:数组名称是指向数组第一个元素的常量指针。因此,在声明中-
    
    double balance[50];
    
    balance是指向&balance [0]的指针,它是数组balance的第一个元素的地址。因此,以下程序片段为p分配了balance的第一个元素的地址-
    
    double *p;
    double balance[10];
    
    p = balance;
    
    使用数组名称作为常量指针是合法的,反之亦然。因此,*(balance + 4)是访问balance [4]数据的合法方法。一旦将第一个元素的地址存储在p中,就可以使用* p,*(p + 1),*(p + 2)等访问数组元素。以下是显示上述所有概念的示例-
  • 示例

    
    #import <Foundation/Foundation.h>
    
    int main () {
       
       /* an array with 5 elements */
       double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};
       double *p;
       int i;
    
       p = balance;
     
       /* output each array element's value */
       NSLog( @"Array values using pointer\n");
       for ( i = 0; i < 5; i++ ) {
          NSLog(@"*(p + %d) : %f\n",  i, *(p + i) );
       }
    
       NSLog(@"Array values using balance as address\n");
       for ( i = 0; i < 5; i++ ) {
          NSLog(@"*(balance + %d) : %f\n",  i, *(balance + i) );
       }
     
       return 0;
    }
    
    当以上代码一起编译并执行时,将产生以下结果-
    
    2020-08-07 09:18:13.552 test[13596:8164] Array values using pointer
    2020-08-07 09:18:13.558 test[13596:8164] *(p + 0) : 1000.000000
    2020-08-07 09:18:13.558 test[13596:8164] *(p + 1) : 2.000000
    2020-08-07 09:18:13.558 test[13596:8164] *(p + 2) : 3.400000
    2020-08-07 09:18:13.558 test[13596:8164] *(p + 3) : 17.000000
    2020-08-07 09:18:13.559 test[13596:8164] *(p + 4) : 50.000000
    2020-08-07 09:18:13.559 test[13596:8164] Array values using balance as address
    2020-08-07 09:18:13.559 test[13596:8164] *(balance + 0) : 1000.000000
    2020-08-07 09:18:13.559 test[13596:8164] *(balance + 1) : 2.000000
    2020-08-07 09:18:13.559 test[13596:8164] *(balance + 2) : 3.400000
    2020-08-07 09:18:13.559 test[13596:8164] *(balance + 3) : 17.000000
    2020-08-07 09:18:13.559 test[13596:8164] *(balance + 4) : 50.000000
    
    在上面的示例中,p是指向double的指针,这意味着它可以存储double类型的变量的地址。一旦我们在p中有地址,那么* p将为我们提供在p中存储的地址处可用的值,如上例所示。