取地址操作及指针初始化 种初始化指针的方式是先声明指针变量,然 后用取地址操作符将其初始化 int i,*p; &i; ■用的地址初始化p使得p指向了i p i 11
取地址操作及指针初始化 一种初始化指针的方式是先声明指针变量,然 后用取地址操作符将其初始化 用i的地址初始化p使得p指向了i 11 int i, *p; ... p = &i;
取地址操作及指针初始化2 也可以在声明指针的同时对其进行初始化 int i; int *p =&i; 甚至可将变量的声明和指针ρ的初始化同时进 行: int i,*p =&i; 12
取地址操作及指针初始化2 也可以在声明指针的同时对其进行初始化 甚至可将变量i的声明和指针p的初始化同时进 行: 12 int i; int *p = &i; int i, *p = &i;
解引用操作符 如果指针变量实际指向了某个object,可以用解 引用操作符*访问该对象本身 ■假设p指向i,可用如下语句打印i的值: printf("‰d\n",*p); 应用&到一个变量产生一个到该变量的指针; 应用*到指针则得到指向的变量: j=*&i; /same as j=i;* 13
解引用操作符 如果指针变量实际指向了某个object, 可以用解 引用操作符*访问该对象本身 假设p指向i, 可用如下语句打印i的值: printf("%d\n", *p); 应用&到一个变量产生一个到该变量的指针; 应用*到指针则得到指向的变量: j = *&i; /* same as j = i; */ 13
别名(alias) 指针p指向i,*p实质上就是变量i,因此称*p 为1的别名 *p与变量具有相同的值 必改变*p实质上会改变i ■下页slide示意了*p和i的等价性 14
别名(alias) 指针p指向i, *p实质上就是变量i,因此称*p 为i的别名 *p 与变量i具有相同的值 改变*p实质上会改变i 下页slide示意了*p和i的等价性 14
别名示例 1p=&i; 2 3 4 1=1; p 1 5 6 7 printf("%d\n",i); /prints 1 * 8 printf("%d小n",*p); /prints 1 * 9*p=2; 10 p 2 i 11 12 printf("%d\n",i); /prints 2 * 13 printf("‰dn",*p); /prints 2*/ 15
1 p = &i; 2 3 4 i = 1; 5 6 7 printf("%d\n", i); /* prints 1 */ 8 printf("%d\n", *p); /* prints 1 */ 9 *p = 2; 10 11 12 printf("%d\n", i); /* prints 2 */ 13 printf("%d\n", *p); /* prints 2 */ 别名示例 15