C程序设计语言——八、指针(1)指针和指针变量
目录
目录
一、指针的概念
1、小概念
2、p=&i; *p=i
3、指向就是通过地址来体现的
4、指针变量
二、变量的两个物理意义
1、指针:一个变量的地址
2、指针变量:专门存放变量地址的变量
3、指针p指向了变量a:p保存了a的地址 p=&a
三、指针变量的定义
1、基类型 *指针变量名; 如:int *p1,*p2;
2、注意
四、指针变量的赋值
1、初始化赋值
2、赋值
3、指针使用说明
五、指针变量的引用
1、格式:*指针变量
2、运算符:&、*
3、知识点
4、《输入两个数,使其从大到小输出》
六、指针变量作为函数参数
1、实参、形参 = 数组名
2、实参 = 数组名,形参 = 指针变量
3、实参、形参 = 指针变量
4、实参 = 指针变量,形参 = 数组名
5、《利用指针变量作为函数参数,以及编程子函数,内容实现了交换》
七、指针使用注意事项
1、指针指向哪里,必须指向一块有意义的内存;
2、未初始化的指针不能使用;先定义,后赋值,再使用,如果未初始化,指针为“野指针”;
3、指针变量和普通变量的区别
一、指针的概念
1、小概念
- 由于通过地址能找到所需的变量单元,地址指向变量单元;
- 一个变量的地址称为该变量的“指针”,地址可以称为“指针”
2、p=&i; *p=i
- p = &i 把i的地址存放在p的存储单元中;
- *p = i 把i的存储单元中的数据存放在p的存储单元中
3、指向就是通过地址来体现的
4、指针变量
- 专门存放另一个变量的地址的变量为“指针变量”;
- 指针变量的值是地址(指针)
二、变量的两个物理意义
变量值 变量地址
1、指针:一个变量的地址
2、指针变量:专门存放变量地址的变量
3、指针p指向了变量a:p保存了a的地址 p=&a
三、指针变量的定义
1、基类型 *指针变量名; 如:int *p1,*p2;
2、注意
- 指针变量也是变量,在内存中也要占用一定的内存单元,但所有类型的指针变量都占用同样大小的内存,16位=2B、32位=4B
- 指针变量前面的“ * ”,表示该变量的类型为指针型变量
四、指针变量的赋值
1、初始化赋值
- 基类型 *指针名 = 初始化地址值;int i;int *p = &i;
2、赋值
- int i,*p;p=&i;
3、指针使用说明
- 在定义指针变量时必须指定基类型
- 使用指针变量时,要与基类型一致:float a;int *p = &a;错误
- 指针变量中只能存放地址,不要将一个整数赋给一个指针变量:int *p;p=89;错误;
- 相同基类型的指针变量可以相互赋值:int a,b;int *p1,*p2;p1=&a;p2=p1;
- 可以用NULL对指针变量赋值,使其不指向任何变量:int *p;*p=NULL;
五、指针变量的引用
1、格式:*指针变量
- *为指针运算符;
- int a,*p;p=&a;*p=10 (相当于 a=10);
2、运算符:&、*
- &:取地址运算符
- *:取内容指针运算符(或称“间接访问”运算符)
3、知识点
- 指针变量,先定义,后赋值,再使用;
- 没有赋值的指针变量是没有任何意义的,是不允许使用的野指针;
- 指针变量只能指向定义时所规定类型的变量;
- p与&a等价、*p与a等价
4、《输入两个数,使其从大到小输出》
//输入两个数,使其从大到小输出——其一:内容交换
#include<stdio.h>
void main()
{int *p1,*p2,p,a,b;p1=&a;p2=&b;scanf("%d,%d",p1,p2);if(*p1<*p2){p=*p1;*p1=*p2;*p2=p;}printf("a=%d,b=%d\\n",a,b);printf("max=%d,min=%d\\n",*p1,*p2);
}
/*/
//输入两个数,使其从大到小输出——其二:指向交换
#include<stdio.h>
void main()
{int *p1,*p2,*p,a,b;scanf("%d,%d",&a,&b);p1=&a;p2=&b;if(a<b){p=p1;p1=p2;p2=p;}printf("a=%d,b=%d\\n",a,b);printf("max=%d,min=%d\\n",*p1,*p2);
}
六、指针变量作为函数参数
1、实参、形参 = 数组名
2、实参 = 数组名,形参 = 指针变量
3、实参、形参 = 指针变量
4、实参 = 指针变量,形参 = 数组名
5、《利用指针变量作为函数参数,以及编程子函数,内容实现了交换》
#include<stdio.h>
void main()
{void swap(int *p1,int*p2);int a,b,*pa,*pb;pa=&a;pb=&b;scanf("%d%d",&a,&b);swap(pa,pb);printf("%d,%d",a,b);
}
void swap(int *p1,int *p2)
{int temp; //普通变量temp=*p1; //赋值*p1=*p2;*p2=temp;
}
七、指针使用注意事项
1、指针指向哪里,必须指向一块有意义的内存;
2、未初始化的指针不能使用;先定义,后赋值,再使用,如果未初始化,指针为“野指针”;
3、指针变量和普通变量的区别:
- 相同点:
- 都占有内存单元,有相应的地址;
- 先定义,后使用!!!
- 指针变量的特殊性:
- 指针变量的内容只能是地址;
- 必须初始化 (有明确指向)
- 参与运算有限:赋值、关系运算、自增、自减、加、减
拜拜~