C语言15指针(iii)

指针 操作 一维字符型数组 

char s[] = "hello"';

char *p = s; //推导过程 和 一维整型数组相同 


void Puts(char *s) <==> void Puts(char s[])
{
   输出字符串 
   
   while (*s)
   {
       putchar( (*s)++);
   }
}


void Puts(const char *s)
{
   输出字符串 
   
   while (*s)
   {
       putchar( (*s)++);
   }
}

注意:
  1.形参 设计为 const char *
    目的,
        防止函数中的误操作 ,修改传进来的值。
  2.好处
    (1).提前发现问题 
        将运行时问题,提前到编译时  
    (2).const char *
        可以接收 
        char *
        const char *

       实参:
         可以 数组名 
         可以 指针变量  char *p //const char *p         
         可以 直接是一个字符串常量 
        提高参数的适用性 
        
注意:
    能写成const的 都写const 
        
        

const char *s  //

const //只读  

const int a; //a 此时是一个只读的变量 

----------------------------------------------------------------------------------------------------
int *p; //基类型     //目标类型  
        //指针变量      
        
int a = 10;
//int *p = &a;

const int *p = &a;   //const限定是 基类型 
                     //表示不能通过 *p 的方式 修改基类型数据 
                     
int const *p = &a;   //const限定是 基类型 
                     //表示不能通过 *p 的方式 修改基类型数据 

                     
int * const p = &a; //const限定是 指针变量p 
                    //表示将p限定位只读 
                    //表示p不能被修改 
                    
const int * const p = &a;  //基类型和指针变量 都被限定为只读
                           // p = &b; //不能修改 
                           //*p = b;  //不能修改 
应用:
    1.如果 不想 通过*p方式改变基类型对应的数据 
      const int *p = &a;  
      int const *p = &a;  
    2.如果 指针变量p 定义好后,不想再指向别的变量 
      则 
        int * const p = &a;
                     
原则:
   就近原则  //const 离谁近 就限定谁 

   
   
指针 + 字符串 

字符串 // 在c语言中是按照字符数组的形式存储
            // 字符串常量 --- 存储在字符串常量区 
       
处理字符串:
   char s[] = "hello"; //表示 在栈上开辟一块空间,用字符串常量中的 "hello"
                       //进行初始化 
                        
   const char *p = "hello"; //表示 p指向了 字符串常量区中的 "hello"
                                        //因为 是指向了字符串常量区 
                                       //只能做读取操作,不能修改
                            

        
总结:
   1.指针操作一维字符型数组 //字符串
   2.知识点
     //1.指针变量的 类型 是怎么确定的?
     //2.一维字符型数组 字符串 
     //3.处理字符串数据方式
        char s[] = "hello";
        const char *p = "hello"; 
    //4. const 关键字  
         const 关键字使用方法 
         const 形参          
   3.实现字符串相关函数
     gets 
     puts  //string  --- stdio 
     
     strlen 
     strcpy /strncpy
     strcat /strncat 
     strcmp /strncmp
     
 

 
 void * //NULL 空指针 
        //空类型的指针 --- 万能指针
        //可以接收任意类型的指针
        
注意:
  1.注意,如果用 空类型指针 进行 间接运算 
          必须 转换成 有明确类型的指针 
        
        
--------------------------------------------------

指针 操作 二维数组 

int a[2][3];

//二维数组 
1.c语言中并不存在,真正的二维数组。
2.二维数组本质 是一维数组的一维数组 
3.二维数组 也 符合数组的特点 //连续性,有序性,单一性 

//从二维数组的本质出发 
int[3] a[2]; 

问题:
1.确定需要定义什么类型的指针?
   &a[0]
    //a[0]  --- int[3]
    //&a[0] --- int[3] * 
    //c语言中 不支持 int[3] *  
    //正确写法 int(*)[3]

int(*p)[3] = a; //p指向二维数组 a 
                //p的基类型 int[3]

*p <=> a[0] // 相当于是内部这个一维数组的数组名 
       (*p)[0] 
       *(*p+0) //**p

*(*(p+1)+1) <=> a[1][1]
*(*(p+i)+j) <=> a[i][j]       
   
   
注意:  
   二维数组的操作
   从二维数组的本质 进行的 
   二维数组的本质 一维数组的 一维数组
   直接的访问操作 也是 一维一维的展开  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值