C语言中指针整理1

指针变量(一级指针)
指针变量用来记录地址数字
只有捆绑过的指针才能使用
在捆绑过的指针前加*可以表示捆绑变量的存储区
指针也分类型,不同类型的指针适合与不同类型的存储区捆绑

//指针演示
#include<stdio.h>
void main()
{
      int num = 0;
      int* p_num;  
      p_num = &num;
      *p_num = 10;
      printf("num是%d\n",num);
}

以上例子中 p_num = &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;
}               

指针变量和普通变量之间的捆绑关系会随着程序的执行不断改变
可以把指针看做是变量的某种身份

指针与变量都是有地址的
指针就是地址,指针变量就是在运行中,存放地址变量的;也就是说 指针 指向的地址不断变化;
我认为指针是个特殊的变量;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值