引入
char a ='c',c被放到了缓存里
理论讲解
地址
- 内存中每一个存储单元有唯一编号,这个编号称为存储单元的地址。在程序中所定义的变量,编译系统会根据变量的类型,分配一定长度的存储空间。
如:
int a; /*2个字节*/
float b; /*4个字节*/
- 如果在程序中定义了一个变量,系统会根据变量的类型为变量分配相应字节的 存储空间,用于存放数据,存放的数据称为内存单元的内容。而系统为变量分配的存储空间的 首个 存储单元的地址被称为变量的地址。
int a的地址是2000H
float b的地址是2002H
指针
指针:指针就是地址,一个变量的地址称为该变量的指针。
- 如果地址2000h是变量a的指针(表示成&a)
指针变量:存放地址的变量 称为指针变量
指针变量的值为地址。
指针变量的指向:
如果指针变量p中存放的是变量a的地址,则称指针变量p指向变量a。这样,对变量a的访问就有两种方式,一种是直接通过变量a来访问;另一种是通过指针变量a的指针变量p来访问。
访问变量的方式
- 直接访问的方式:通过变量名直接存取变量的值。
- 间接访问方式:按变量的地址存取变量的值。
指针变量的定义和使用
·定义指针变量的一般形式为:
例如:int *pt;
其中:
int——pt是只想int型变量的指针变量。
*——指针标记。
pt——指针变量名,只能存放指针。
注意:
- 只能存地址
- 只能存int型变量的地址。
- *p:取值
- p:取地址
- 再次使用的时候就不用带* 了
指针的定义及初始化
例如:int a,b;
int *p1,*p2; ----| int *p1=&a;
p1 = &a; |-→
p2 = &b; ----| int *p2=&b;
& 获取变量地址
如何通过指针(地址)去访问元素
用 应用指针变量:运算符用于某个地址之前,表示取*厚地址的内容
int i;
int *p; //*变量定义
p = &i; //变量赋值
*p = 5; //相当于i=5
p 是指向整型变量的指针变量,*p是整型变量i的值。
*p => 根据p里面的地址,去缓存中 找 到这个地址中存的数值。
后面可以加地址:(&i),指针变量:*(指针变量)
*:取地址里的值
课堂验证
int a,b;
int *p1,*p2;
a=10;
b=20;
p1=&a;
p2=&b;
printf("%d %d\n",*p1,*p2);
p1=p2;
*p2=5;
printf("%d %d\n",*p1,*p2);
看看能否看懂
结果
int a,b;
int *p1,*p2;
a=10;
b=20;
p1=&a;
p2=&b;
printf("%d %d\n",*p1,*p2);
*p1=*p2;
*p2=5;
printf("%d %d\n",*p1,*p2);
验证结果2
赋值为空
定义一个空指针 int *p;p=NULL;
- 两个指针变量相减:两个指针指向的是同一个数组元素,相减所得的就是之间元素的个数。(两个指针相加没意义)
- 两个指针变量的比较:可以判断相应的数组元素的位置先后。
真题
编程练习
输入三个整数,按要求从小到大的顺序输出,要求用指针完成
答案
暂无
指针与数组
理论
(一)指针变量的运算
(二)一维数组元素的表示法
理论讲解
(三)指针作为函数参数(传地址)
指针变量存放的是地址值,同样可以作为函数的参数来进行“地址传送”,实际参数可以是地址常量或指针变量,形式参数则为指针变量(通过“传值”完成参数即:地址的传递)。
用函数来实现两个数的交换
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a=3,b=5,*pa,*pb;
pa=&a;pb=&b;
swap(pa,pb);
printf("%d%d\n",a,b);
printf("%d%d\n",*pa,*pb);
return 0;
}
解析
联系
从键盘输入10个数,找出其中最小的数并显示出来。要求使用数组。使用指针移动来找出最小值。
答案(敲一遍)