8.14指针的基本运算 如果指针的值是某个变量的地址,通过指针就 能间接访问那个变量。 取地址运算和间接访问运算 &取地址运算符,给出变量的地址 intp,a=3;指针变量的类型和它所指向变量的类型相同 p=&a;把a的地址赋给p,即p指向a a &a *间接访问运算符,访问指针所指向的变量 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指针取地址运算和间接访问运算 if include <stdio. h> int main(void) p a i int a=3, *p; a 3 =8a printf(“a=%d,*p=%dn”,a,*p) p=10; printf("a=%d, *p=%dIn", a, *p); a=3,*o= printf( Enter a: a=10,p=10 scanf(%d",&a); Enter a: 5 printf("a=%d, *p=%d\n", a, *p) (^p)++; a=5,p printf("a=%d, *p=%d\n", a, *p) a=6,*p=6 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
()当p=&a后,*p与a相同 说明 (2)int*p;定义指针变量p p=10;指针p所指向的变量,即a (3)8p与&a相同,是地址 *&a与a相同,是变量 (4)(p)++等价于a++ int a=1, X,*p; =&a 将p所指向的变量值加1x=↑p+; *p++等价于*p++) 先取*p,然后p自加,此时p不再指向a a 3 p
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指向a p2=p1; 相同类型的指针才能相互赋值 p2也指向 p a p a p2 2 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 相同类型的指针才能相互赋值
81.5指针变量的初始化 1指针变量在定义后也要先赋值再引用 2)在定义指针变量时,可以同时对它赋初值 int a int *p1 =&a int *p2= p1 3)不能用数值作为指针变量的初值,但可以将 个指针变量初始化为一个空指针 int*p=1000; p=0 使用强制类型转换(nt)来避免编译错误,不提倡 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*) 来避免编译错误,不提倡