文档介绍:第八章:指针
知识结构:
1) 指针的基本概念
2) 怎么定义指针
3) 指针的运算
1)指针的基本概念
内存:以字节为单位,由若干个字节组成 为了便宜管理,给每个字节编号(十六进制) 每一个字节的编号在整个内存都是唯一
定义 continue
输入两个数,找出最大值(用指针来操作)
甘include "stdio. h〃
void main()
(
int a, b, *p=&a, *q=&b, *max=NULL;
scanf (〃%d%d〃, p, q);
if(*p>*q)
max = p;〃使指针max和指针p指向同一个变量
else
max = q;
printf("max = %d\n〃,*max);
90 50
max = 90
Press any key to continue
^include 〃stdio. h〃
void main()
int a=10, *p, **q;
p = &a;
q = &P;
printf (〃a=%d, a=%d\n〃,*p, **q):
}
a=10, a=10
Press any key to continue
单目运算符:
!逻辑非
+正号
-负号
++自增
—自减
&取地址
*间接访问
(类型名)强制类型转换
平级:结合性右结合(从右到左的运算顺序)
运算过程中:先按优先级别去运算,同级的按结合性去运算 int a, *p;
p = &a;
*p <=> *(&a) <=> a
int a=10, *p=&a;
(*p)++ *p++ 10 &a+l*2
10
P = P + 1;
1: 一个存储单元(针对与不同类型的变量,1所代表的字节
数有所不同)
移动两个字节(TC环境)
int a, *p;
p = &a
p++ 表达式的值:&a p不再指向a变量,而指向a所
代表存储单元的后两个字节的地方
++p 表达式的值:&a + l*sizeof(int)
sizeof(基本类型关键字):返回是指定的类型
在当前环境中所占的字节数
指针可以和整数进行运算
可以代表一个地址(某一个字节的编号)
int a;
double b,*p;
p = &b;
p = &a;/* 错误 */
p+1表示p指针所指位置的下一个位置
p+1 <=> &b+l*sizeof (double) <=> &b+l*8
p+5 <=> &b+5*sizeof(double) <=> &b+5*8
p++ <=> p = p + 1
要让指针重新定位指向,需要重新各其赋值
指针的移动,必须针对一片连续的存储单元才有意义
对于单个变量来说,指针的移动将让没有办法控制指针
^include "stdio. h〃
void main()
int a, *p;
a=10:p = &a;
printf(〃%d\n〃, (*p)++);
a=10;p=&a;
printf(〃%d\n〃, *p++);
a=10;p=&a;
printf(〃%d\n〃,++(*p));
a=10;p=&a;
printf(〃%d\n〃,++*p);
10
10
11
11
Press any key to continue
10
11
Press any key to continue
a = 10
(*p)++ 10 *p = 11
(a)++ 10 a = 11 a=10;p=&a;
*p++ p++ &a p=&a+l*sizeof(int)
*(&a) 10 *p
i= 1
a=i++
a=i
i=i+l
++i
i=i+l
a=i
a=10, *p, *q
p=&a;
q=p++
q 二 p
p=p+l
q=++p
p=p+1
q=p
b=(*p)++ b=*p
*p = *p + 1
b=++ (*p)
*p = *p + 1 b 二 *p
b = *p++
<=> b
= *(p++)
b = *p++
b=*p
p=p+l
第八章:指针02
指针的概念
地址
指针变量定义
指针变量的赋值
int a, b, *p, *q, *k;
p = &a;
q = P;
k = NULL
k = 0
k=' \0'
指针的运算
(*p)++ ++*p
d*=q [+d=d
(d++)*二 q
l+d二d d*二q
++d* = q
d*=q
l+d*二d*
(d*)++
l+d*