C语言指针 与字符串的学习

字符数组   元素是单个单个的字符                         char cdata[  ] ={ ' a ',   'b'  , 'c'  ,'d'  , 'e'     };           字符串      末尾隐藏     '  \0 '                                     char cada[ 100  ]   ={   ' \ 0  '   };      置0             表达式1    char cdata [ 12 ] ="mydm sz  ";           表达式2    char *pchar ="mydm sz";                     表达式1与2的区别在于 :                                     1中cdata是地址变量,可以修改对应的字符串里的单个字符内容                                                2中 pchar是地址常量,字符串是个整体,无法被修改,只有整体概念,无单个字符概念       表达式1与2的区别在于:                                     sizeof( p  )  在os中一个地址8位/4位                   sizeof(cdata) 数组的所有空间                             strlen(cdata)有效数据的空间

 

      字符串相关操作:                                                char cdata [ 128  ]     ={  '    \0  '   };                     scanf( " %s "  ,  cdata );                                     char *pchar =  "mydm sz" ;                                   puts(pchar)  ;                                                           putchar( '  A ' );                                                        puts(" Done!  "  ) ;

       

表达式1下的sizeof和strlen                                   char cdata[ 121  ]   ="mydmsz";                            sizeof 标识符                                                                      数组开辟的总空间大小                               strlen函数                                                                            数组开辟的有效数据的空间大小             常见的API函数                                                      <   stdblib.h      >         

1.malloc函数

  p  =(  void *)malloc(12)    在堆上开辟空间,使指针不野。 

  2.realloc在原本p的内存上开辟newlwn空间         char *p=(   char *) malloc(  num)  ;                        int len= strlen("yyyyyyyyyyy     ");                         int newlwn =len-num+1;                                        realloc  (p,   newlen  )                                            换成情形1可以实现用户根据自己的输入开辟对应的空间,扩容对应的空间。               

 

                                                                         3.free函数

free (   p )     清除malloc开辟空间,特别是已经成了悬空的内存空间                                         

 

 

 

<string.h>

   1.memset                                                               字符串在情景1下才能这样用(用sizeof)                      char str[10];                                                               memset(str, '\0', sizeof(str));                   在情景2下只能用单独的数字                              p  =(  void *)malloc(12)                                 memset( p,  '\0' ,12或者num  )  ;                        2.strcopy ( strncopy ) 用后面的(其中几个字节)把前面覆盖  函数。指针1和指针2齐头并进。       

   strncmp                                                                    while(*des   &&  *src  &&  (    *des=*src  )&&count  )                                            进入if条件同理

若count大于元函数的大小 用count--耗尽,下面*des被赋结束标志后立即返回函数值bak,防止最下面*des被再次赋结束标志。           

 

 

 

 

3.strcat       指针1先走,找到自己的\0之后,指针二的内容覆盖到\0上  ,两指针各自前行    最终出现两个结束\0标志,实际上上是一个\0,赋值后与while里的0比较不满足条件,指针不自增,即跳出条件的\0把原本被赋值的\0给覆盖了(用的是     (*a++=*b++)!='\0'  )       

另一种方式   借助strcopy(cdata+strlen(cdata) ,  p );

 

 

 


4.strcmp  比较函数                                              对应长度对应字符不相等时跳出                              while(*des   &&  *src  &&  ( *des=*src  )  )        while里有指针时,条件侧重'  \0  '  不满足条件                                                                               if(*des  ||  *src  ) 进入条件进行各自对应的相加,注意这之前需将指针归位                                                           

 

<assert.h>断言函数                                                assert(des!=  NULL  &&  src!=NULL   )                 当条件不满足时,打印提示信息并将中指程序向下的运行

 

 

 

本章结的总要思想

1.(*a++=*b++ )  !='  \0'   ;                                          自增运算第一位,但指针++放在所有操作进行完之后,即先两个解引用完,在进行赋值,在进行条件的判断,只有当前面的操作进行完之后,指针才会++

2.while中有指针时                                                   '\0' 就是0,即不满足条件                                     while(*des);                                                      

3.while(*src)

{   *des =*src;             情况A                                                 des++;                                                                     src++;

}                                                                                   *des ='\0';                                                                 

情况B                                                                         while(  (*des++ =*src++)     !='/0'     );             *des='/0';                                                                  看似两个结束标志,实则指针未移动,条件的结束标志把 *src赋给*des的结束标志 覆盖            

if(des==NULL|| src==NULL){

return 0;                                                                    }

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值