C语言基础 字符串


一、字符串(掌握)

1、字符串指针

【注】使用字符串指针指向一个字符串时,不能使用指针来改变字符串的内容。

2、字符串库函数

(1)atoi():将一个数字字符串转换成对应的整数。

(2)strlen():求字符串有效长度。

【扩展】strlen和sizeof的区别

      (1)strlen是库函数,sizeof不是。

      (2)strlen获取实际字符个数,sizeof获取占用内存大小。

(3)strcmp():比较两个字符串

          返回值:返回整型值:

          如果后面的字符串的某个字符比前面的大,返回值小于零(ASCII码相减)

         如果后面的字符串的某个字符比前面的小,返回值大于零(ASCII码相减)

          如果后面的字符串与前面的字符串完全相同,返回值等于零

 

(4)strcpy()将后面的字符串常量拷贝到前面的字符串指针指向的存储区

注意事项见5.c

练习:自己实现strcpy()

char *  mystpcpy(char *dst, const char *src);

 

 

【扩展】解决字符数组越界的问题,可以使用strncpy

 

(5)strcat()在原有字符串的基础上追加字符串。

【注】原有字符串所在的内存空间要能容纳下追加的字符串。

(6)strstr()查找并返回第二个字符串在第一个字符串中第一次出现的位置。

二、函数指针

1、声明并初始化函数指针

声明格式:

返回值类型 函数指针名(参数列表) = 函数名;

2、函数指针的使用

见10.c

3、函数指针作为函数的参数

见11.c

 

三、静态内存分配

1、定义:在编译阶段就确定大小,程序运行的时候,由OS进行分配,使用完成之后,由OS统一释放。

2、优点:无需人工干预,效率高。

3、缺点:内存使用率低,内存浪费。

【注】栈空间采用静态内存分配

 

四、动态内存分配

动态内存分配主要在堆区

1、在程序运行过程中,根据需要随时申请,用完之后可以立即释放。

2、优点:节省内存,内存使用率高。

3、缺点:需要人工参与,用完之后需要手动释放,申请有可能会失败,需要有异常处理机制。

4、生命周期:从申请开始到释放结束。

5、申请和释放

申请:malloc

释放:free

【潜在风险】

  (1)忘记释放,会造成内存泄露。

(2)过早释放,可能会造成野指针。

(3)多次释放,会造成程序崩溃。

如果p在释放后,置为NULL,那么free多少次,都没问题。

如果p在释放后,没有被置为NULL,那么free多次后会造成程序崩溃。

       【扩展】堆和栈的区别

       (1)栈:由系统自动分配和释放内存。例如声明在函数中的局部变量 int a;系统会自动在栈区为a开辟内存空间。

        (2)堆:需要程序员手动申请,并指明大小,用完之后释放。

例子详见2.c

 

五、【扩展】复杂指针(了解)

1、二级指针

2、指针数组和数组指针

数组指针:是指向数组的指针。

指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。

六、【扩展】typedef关键字(OC要使用)

1、作用:是给基本或自定义数据类型起别名

2、typedef与指针

3、typedef与函数指针

 


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值