嵌入式学习 Day13

一. 指针总结

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

eg:
  int a,b,*p,*q; //p和q都是指针类型的变量 ;a,b是 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   --- 偏移了一个积累性 

  通过指针访问到数组元素:
 
5.指针运算 

 &
 * 
 p+1
 p++ 
 p-1
 p-- 
 p-q     前提: 同一类型的指针才能相减, 相减的结果表示之间差了几个基类型的空间

 p+q    指针不能做加法运算 
 
 迭代
                     
 b                          e
 1 2 3 4 5 6 7 8 9 10

   

    b                   e
 1 2 3 4 5 6 7 8 9 10
 ........

                 b
                 e     
 1 2 3 4 5 6 7 8 9 10

练习:逆序,以迭代实现
 

嵌入式学习 Day13_第1张图片

作业:
   迭代的方式 ,实现选择 冒泡  插入

嵌入式学习 Day13_第2张图片
  
思考题:
     二分查找 用递归方式实现 

     嵌入式学习 Day13_第3张图片

嵌入式学习 Day13_第4张图片

注意:函数头中定义了返回值的类型,这说明函数是有返回值的,而函数体中并没有写return

此时函数会把所执行的最后一句代码的值作为返回值带出来。

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

char *p = s;    //s数组名 --- 代表 数组首元素的地址 
                      //s[0]  --->类型 char型
                      //&s[0] --->char * //地址类型 
        
练习:
   实现一个输入操作 

练习:
   字符串逆序 ---通过指针 
              b       e
   "hello" // h e l l o '\0'

嵌入式学习 Day13_第5张图片

7.const

int puts(const char *s)
    {
    }

//const char *s --在函数里面 不能通过*s修改到外面的数据 

就近原则 -- 离谁近,就限定谁的  

const int *p = &a; //表示限定 基类型 为只读变量(无法通过*p修改,但可通过对a赋值修改) 
int const *p = &a;     //表示限定 基类型 为只读变量

int *const p = &a;     //限定p为只读 

const int * const p = &a;  //p不能被修改,指向的目标类型不能被修改  (是不能通过*p,但可通过赋值) 


const char *p = "hello"     //hello为常量,存储在常量区,无法通过*p修改

const char s[ ] = "hello"   //s开辟在栈上,hello存储在常量区,相当于复制了一份常量区上的数据初始化了一下s那块空间


    好处:
    1.可以接收 字符数组名   //char *
      也可以接收 字符串常量 //const char *
      提高了参数的适用性 
    2.避免了 可能出现的修改的操作 
      可以将 运行时的错误,提前到 编译时发现 
      
    const char * p 可以用来保存字符串常量的地址 
    


  8.快速排序

嵌入式学习 Day13_第6张图片

嵌入式学习 Day13_第7张图片

嵌入式学习 Day13_第8张图片

你可能感兴趣的:(算法,数据结构,c语言)