8.1.4指针的基本运算如果指针的值是某个变量的地址,通过指针就能间接访问那个变量。1、取地址运算和间接访问运算&取地址运算符,给出变量的地址int*p,a=3;指针变量的类型和它所指向变量的类型相同p=&a;把a的地址赋给p,即p指向apa3&a*p*间接访问运算符,访问指针所指向的变量*p:指针变量p所指向的变量
8.1.4 指针的基本运算 * 间接访问运算符,访问指针所指向的变量 *p:指针变量 p 所指向的变量 a &a 3 p *p 如果指针的值是某个变量的地址,通过指针就 能间接访问那个变量。 1、取地址运算和间接访问运算 & 取地址运算符,给出变量的地址 int *p, a = 3; p = &a; 把 a 的地址赋给 p,即 p 指向 a 指针变量的类型和它所指向变量的类型相同
例8-2指针取地址运算和间接访问运算# include <stdio.h>paint main (void)*p&a3( inta = 3, *p;p=&a;printf ("a=%d, *p=%din", a, *p);*p = 10;a=3,*p= 3printf("a=%d, *p=%din", a, *p);printf("Enter a: ");a = 10, *p = 10scanf("%d", &a);Enter a: 5printf("a=%d, *p=%din", a, *p);a=5,*p= 5(*p)++;a= 6, *p = 6printf("a=%d, *p=%din", a, *p);return O;
# include <stdio.h> int main (void) { int a = 3, *p; p = &a; printf (“a=%d, *p=%d\n” , a, *p); *p = 10; printf("a=%d, *p=%d\n" , a, *p); printf("Enter a: "); scanf("%d" , &a); printf("a=%d, *p=%d\n" , a, *p); (*p)++; printf("a=%d, *p=%d\n" , a, *p); return 0; } 例8-2指针取地址运算和间接访问运算 a &a 3 p *p a = 3, *p = 3 a = 10, *p = 10 Enter a: 5 a = 5, *p = 5 a = 6, *p = 6
说明(1)当p=&a后,*p与a相同(2)int *p;定义指针变量p*p=10;指针p所指向的变量,即a(3)&*p与&a相同,是地址*&a与a相同,是变量int a = 1, x, *p;(4)(*p)++等价于a++p=&a;将p所指向的变量值加1x=*p++xr*p++等价于*(p++)先取*p,然后p自加,此时p不再指向apa*p3&a
a &a 3 p *p (1) 当 p = &a 后,*p 与 a 相同 (2) int *p; 定义指针变量 p *p =10; 指针p所指向的变量,即a (3) &*p 与 &a 相同,是地址 *&a 与 a 相同,是变量 (4) (*p)++ 等价于 a++ 将 p 所指向的变量值加1 *p++ 等价于 *(p++) 先取 *p,然后 p 自加,此时p不再指向a 说明 int a = 1, x, *p; p = &a; x = *p++;
2、赋值运算int a = 3, *p1, *p2;p1 = &a;把a的地址赋给p1,即p1指向ap2 = p1;相同类型的指针才能相互赋值p2 也指向 ap1a*p1&a3*p2p2&a
2、赋值运算 a &a 3 p1 &a p2 *p1 *p2 int a = 3, *p1, *p2; p1 = &a; 把 a 的地址赋给 p1,即 p1 指向 a p2 = p1; p2 也指向 a 相同类型的指针才能相互赋值
8.1.5指针变量的初始化1)指针变量在定义后也要先赋值再引用2)在定义指针变量时,可以同时对它赋初值int a;int *p1 = &a;int *p2 = p1;3)不能用数值作为指针变量的初值,但可以将一个指针变量初始化为一个空指针int *p=1000;p= 0;使用强制类型转换(int*)来避免编译错误,不提倡p = NULL;p = (int*)1732;
1) 指针变量在定义后也要先赋值再引用 2) 在定义指针变量时,可以同时对它赋初值 int a; int *p1 = &a; int *p2 = p1; 3) 不能用数值作为指针变量的初值,但可以将一 个指针变量初始化为一个空指针 int *p=1000; p = 0; p = NULL; p = (int*)1732; 8.1.5 指针变量的初始化 使用强制类型转换(int*) 来避免编译错误,不提倡