在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
每一个变量是一个内存位置和每一个存储单元都有其定义的地址,可以使用符号(&)的运算符,它表示内存中的地址访问。 a. 我们定义一个指针变量 b. 分配一个指针变量的地址 c. 最后访问提供的地址指针变量的值。这是通过使用一元运算符*返回值的变量,其操作数位于指定的地址。 实例: 1 #import <Foundation/Foundation.h> 2 3 int main () 4 { 5 int var = 20; /* actual variable declaration */ 6 int *ip; /* yiibaier variable declaration */ 7 8 ip = &var; /* store address of var in yiibaier variable*/ 9 10 NSLog(@"Address of var variable: %x", &var ); //Address of var variable: 337ed41c 11 12 /* address stored in yiibaier variable */ 13 NSLog(@"Address stored in ip variable: %x", ip ); //Address stored in ip variable: 337ed41c 14 15 /* access the value using the yiibaier */ 16 NSLog(@"Value of *ip variable: %d", *ip ); //Value of *ip variable: 20 17 18 return 0; 19 } 解惑:
指针的算术运算例 ptr是一个整数的指针,它指向的地址1000,假设32位的整数,执行 ptr++ 操作后,指针将指向 1004 位置 因为每次指针递增,它会指向到下一个整数的位置,这是到当前位置的下一个4个字节。此操作将指针移动到下一个内存位置,而不会影响实际值的内存位置。如果ptr指向一个字符的地址是1000,那么上面的操作将指向下一个字符的位置1001
指针递增运算 1 #import <Foundation/Foundation.h> 2 3 const int MAX = 3; 4 5 int main () 6 { 7 int var[] = {10, 100, 200}; 8 int i, *ptr; 9 10 /* let us have array address in yiibaier */ 11 ptr = var; 12 for ( i = 0; i < MAX; i++) 13 { 14 NSLog(@"Address of var[%d] = %x", i, ptr ); 15 NSLog(@"Value of var[%d] = %d", i, *ptr ); 16 17 /* move to the next location */ 18 ptr++; 19 } 20 return 0; 21 } 产生结果如下: Address of var[0] = 7e6f2a70 Value of var[0] = 10 Address of var[1] = 7e6f2a74 Value of var[1] = 100 Address of var[2] = 7e6f2a78 Value of var[2] = 200 指向指针的指针实例: 1 #import <Foundation/Foundation.h> 2 3 int main () 4 { 5 int var; 6 int *ptr; 7 int **pptr; 8 9 var = 3000; 10 11 /* take the address of var */ 12 ptr = &var; 13 14 /* take the address of ptr using address of operator & */ 15 pptr = &ptr; 16 17 /* take the value using pptr */ 18 NSLog(@"Value of var = %d", var ); 19 NSLog(@"Value available at *ptr = %d", *ptr ); 20 NSLog(@"Value available at **pptr = %d", **pptr); 21 22 return 0; 23 } 产生结果如下: Value of var = 3000 Value available at *ptr = 3000 Value available at **pptr = 3000 解惑:
参考资料:
|
请发表评论