嵌入式13——指针

回顾:
1.指针概念
  a.指针 --- 地址 ---内存单元编号  //值 
  b.指针 --- 数据类型 ---指针类型  //类型 
  不同语境:
  定义一个指针?       //指针类型的变量 
  打印某个变量的指针? //指针 --地址   
2.指针变量的定义
  基类型 * 变量名
  a.基类型 
    数据类型
    基本数据类型 
    数组类型 
    指针类型
  b. *   //定义时候的 * 表示定义的是一个 指针类型的变量 
  c. 变量名 

eg:
  int a,b,*p,*q; //p和q都是指针类型的变量 *是修饰指针变量名的  
  int *p,q; //p是指针变量 q int型变量

  注意:
  1.指针变量的 大小 64位(8字节) 32位(4字节)
  2.指针类型 --- 存储的是 地址 这种特殊的数据 
  
  指针变量的给值:
  int *p;  //野指针 --- 随机值 ---被当做了地址   
           //避免野指针 -- 一般初始化为NULL 
  *p     
  step1: 拿p中地址值 到内存中定位 
  step2: 从定位处开始,偏移基类型大小的一块空间sizeof(基类型)
  step3: 被当做了基类型变量来看 

  *p 整体就是一个基类型的变量   
  
3.核心用途(80%)
  被调修改主调 
  修改:
  1.修改谁,就传谁的地址 
  2.*p(间接访问)运算 
  
4.指针 + 一维整型数组  
  指针 操作 一维整型数组 

  int a[10];

  int *p = a; 

  //1.数组本身的特点 (连续性,单一性,有序性)
  //2.p+1   --- 偏移了一个积累性 

  通过指针访问到数组元素:
  *(p+i) <=> int型的变量   <=> a[i] <=>p[i]<=> *(a + i) 
5.指针运算 

 &
 * 
 p+1
 p++ 
 p-1
 p-- 
 
 关系运算 
   > >= < <= == != 
   p>q
 
 p-q  
     前提: 同一类型的指针 
     表示之间差了几个基类型 
 p+q  //指针不能做加法运算 

快速排序

指针 + 一维字符型数组
char s[] = "hello";

char *p = s; //s数组名 --- 代表 数组首元素的地址 
             //s[0]  --->类型 char型
             //&s[0] --->char * //地址类型

--------------------------------------------------------------------------------------- 

int puts(const char *s); 
const char * s;
const int a; //只读变量 
int a = 10;
const int *p = &a; //表示 基类型 为只读 
p --- 指针变量 --本身的类型 int * 
a --- int型变量 --本身类型 int 
   
p = &a; 

const int *p = &a; 
int const *p = &a; //就近原则 -- 离谁近,就限定谁的  

int *const p = &a;  //限定p为只读 
const int * const p = &a;  //p不能被修改,指向的目标类型不能被修改 
                          //(是不能通过*p) 
   
   
   
    int puts(const char *s)
    {
    }//const char *s --在函数里面 不能通过*s修改到外面的数据 
    
    好处:
    1.可以接收 字符数组名   //char *
      也可以接收 字符串常量 //const char *
      提高了参数的适用性 
    2.避免了 可能出现的修改的操作 
      可以将 运行时的错误,提前到 编译时发现 
      
    const char * p 可以用来保存字符串常量的地址 

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值