指针变量(一级指针)
指针变量用来记录地址数字
只有捆绑过的指针才能使用
在捆绑过的指针前加*可以表示捆绑变量的存储区
指针也分类型,不同类型的指针适合与不同类型的存储区捆绑
//指针演示
#include<stdio.h>
void main()
{
int num = 0;
int* p_num;
p_num = #
*p_num = 10;
printf("num是%d\n",num);
}
以上例子中 p_num = #
我将这种指针指向变量的用法理解为捆绑。
指针 可以在一条语句中声明多个同类型的指针变量,但是必须在每个指针变量名称之前加*
int *p_num,*p_num1;
没有捆绑的指针分为两类:
1.空指针里面记录空地址(NULL),这个地址的数值就是0
2.除了空指针以外的没有捆绑的指针都叫野指针
野指针是指 不知道指向哪里的指针
程序员必须保证程序中不会出现野指针
所以 指针变量必须初始化
指针声明语句中的 *不参与初始化过程
int *p; *p=&a;
其中 * 意义不一样 ;前者实际意义,只是让你区分指针;后者意义是指针p的值
例子:编写程序从键盘得到三个数字,按照从大到小的顺序将三个数字打印到屏幕上.
//不使用指针实现方式
#include<stdio.h>
void main()
{
int num = 0,num1 = 0,num2 = 0,tmp = 0;
printf("请输入三个数:");
scanf("%d%d%d",&num,&num1,&num2);
if(num < num1)
{
tmp = num;
num = num1;
num1 = tmp;
}
if(num < num2)
{
tmp = num;
num = num2;
num2 = tmp;
}
if(num1 < num2)
{
tmp = num1;
num1 = num2;
num2 = tmp;
}
printf("%d %d %d\n",num,num1,num2);
return 0;
}
/使用指针实现方式
#include<stdio.h>
void main()
{
int num = 0,num1 = 0,num2 = 0,tmp = 0;
int *p_num = &num,*p_num1 = &num1,*p_num2 = &num2,*p_tmp = &tmp;
printf("请输入三个数:");
scanf("%d%d%d",&num,&num1,&num2);
if(*p_num <*p_num1)
{
p_tmp = p_num;
p_num = p_num1;
p_num1 = p_tmp;
}
if(*p_num < *p_num2)
{
p_tmp = p_num;
p_num = p_num2;
p_num2 = p_tmp;
}
if(*p_num1 < *p_num2)
{
p_tmp = p_num1;
p_num1 = p_num2;
p_num2 = p_tmp;
}
printf("%d %d %d\n",*p_num,*p_num1,*p_num2);
return 0;
}
指针变量和普通变量之间的捆绑关系会随着程序的执行不断改变
可以把指针看做是变量的某种身份
指针与变量都是有地址的
指针就是地址,指针变量就是在运行中,存放地址变量的;也就是说 指针 指向的地址不断变化;
我认为指针是个特殊的变量;