第八章指针 指针 指针和数组 指针和字符串 指针数组和二级指针 指针和函数
第八章 指针 指针 指针和数组 指针和字符串 指针数组和二级指针 指针和函数
8.1指针 变量地址内容 直接访问 通过变量名直接访问地址 int x x20013 X=3 printf(%od, x 间接访问 px30002001 把变量的地址放到另一变量 中,使用时先找到后者的地 址,从中取出前者的地址 指针变量地址[另一变量的地址
8.1 指针 变量 地址 内容 int x; x = 3; printf(“%d”, x;) x 2001 3 px 3000 2001 直接访问: 通过变量名直接访问地址 间接访问: 把变量的地址放到另一变量 中,使用时先找到后者的地 址,从中取出前者的地址 指针变量 地址 另一变量的地址
int X 变量地址「内容」X=3:pint(%d3,x:) x20013某个变量的地址 指向 指向 px30002001指针变量:存放地址的变量 指针变量地址[另一变量的地址
变量 地址 内容 x 2001 3 px 3000 2001 指针变量 地址 另一变量的地址 指针变量:存放地址的变量 某个变量的地址 指向 指向 int x; x = 3; printf(“%d”, x;)
8.1.1指针变量的定义 类型名*指针变量名; 指针变量所指向变量的类型 int *px px是整型指针,指向整型变量 float pT, pf是浮点型指针,指向浮点型变量 char pc pc是字符型指针,指向字符型变量
8.1.1 指针变量的定义 指针变量所指向变量的类型 int *px; px 是整型指针,指向整型变量 float *pf; pf 是浮点型指针,指向浮点型变量 char *pc; pc 是字符型指针,指向字符型变量 类型名 *指针变量名;
int *px 注意:指针变量名是px,不是*x 类型名*指针变量名 int*pl,*p2;等价于int*pl; Int *k p2:
类型名 * 指针变量名; int *p1, *p2; 等价于 int * p1; int * p2; int *px; 注意:指针变量名是 px,不是*px
8.1.2指针的基本操作 1、&和* &取地址运算符 *指针运算符(间接访问运算符) int*p, a=3 p=&a,把a的地址赋给p,即p指向a a a3 *p:p所指向的变量a
8.1.2 指针的基本操作 *p: p所指向的变量 a a &a 3 p *p 1、&和* & 取地址运算符 * 指针运算符(间接访问运算符) int *p, a = 3; p=&a; 把 a 的地址赋给 p,即 p 指向 a
例8.1指针运算 main i int a=3, p; p a p=&a; &a printf( %d, %d\,,a, *p) scanf( %d ,&a) 输入57 printf("%d, %dn,a, *p) scanf( %d,, p) 输出: printf("%d, %dn,a, *p) 3.3 5.5 p=10 7.7 printf("%d, %dn,,a, * p) 10.10
a &a 3 p * p 输入 5 7 输出: 3, 3 5, 5 7, 7 10, 10 main( ) { int a = 3, *p; p = &a; printf(“%d,%d \n”, a, *p); scanf(“%d”, &a); printf(“%d,%d \n”, a, *p); scanf(“%d”, p); printf(“%d,%d \n”, a, *p); *p = 10; printf(“%d,%d \n”, a, *p); }例8.1指针运算
例8,2指针运算 main( It a. b p a int pl 2 pl,p &a 100 p a=100:b=10 2 p1=&a; &b 10*p2 2=&b printf( %od, %dn, a, b) 输出 printf( %d, %dn,,*pl, *p2); 100.10 100.10
b &b 10 p2 *p2 输出: 100, 10 100, 10 a &a 100 p1 *p1 main( ) { int a, b; int *p1, *p2; a = 100; b = 10; p1 = &a; p2 = &b; printf(“%d, %d\n”, a, b); printf(“%d, %d\n”, *p1, *p2); } 例8.2指针运算
指针运算注意事项 (1)当p=&a后,*p与a相同。 (2)int*tp;定义 *p=10;p所指向的变量 (3)&*p与&a相同,是地址 *&a与a相同,是变量 p a &a 3 p
a &a 3 p *p 指针运算注意事项 (1) 当 p=&a 后,*p 与 a 相同。 (2) int *p; 定义 *p =10; p所指向的变量 (3) &*p 与 &a 相同,是地址 *&a 与 a 相同,是变量
当p=&a时 (*p)++等价于a++ 将p所指向的变量值加1 *p++等价于*(p+) 先取*,然后p自加,此时p不再指向a p a &a 3*p
a &a 3 p *p 当 p=&a 时 (4) (*p)++ 等价于 a++ 将p所指向的变量值加1 *p++ 等价于 *(p++) 先取 *p,然后 p 自加,此时p不再指向a