day 14

c语言中出现段错误的原因:

        1、数组越界;

        2、非法操作空间;(操作空指针或者野指针)

        3、修改常量区的内容。

main函数传参:

        函数名:main

        形参

        1、统计当前传入形参的个数(自动统计)

        2、存储传入的参数各自首地址的指针数组

        如何传参

        通过命令行操作

        eg:./a.out     aa  bb  cc

        以上等价于传入参数的个数为4个,即:argc=4;

        argv数组中存储以上每一个字符串的首地址

        int main(int argc, const  char  *argv[])

函数和指针的结合

        函数指针

        概念:返回值类型是指针类型的函数

    

        能造成以上问题的原因:因为定义的数组是一个局部数组,存在生命周期的限制,

       

申请空间:malloc

        函数原型:void * malloc(size_t size);

        功能:用来在堆区申请一片连续的内存空间

        参数:所申请空间的字节数

        返回值:成功代表申请空间的首地址,失败返回值为NULL

释放空间:free

        函数原型:void free(void *pstr);

        功能:释放一片空间

        参数:malloc成功后的返回值

        返回值:空

扩容空间:realloc

        函数原型:void  * realloc(void * ptr,size_t size);

        功能:扩容空间(注意:扩容之后的空间可能在之前旧空间基础之上再扩充了一段,也可能找到了一个更大更新的空间,此时返回值就会和之前旧空间地址不一样)

        参数:①malloc的返回值(所需扩容空间的首地址)

                   ②扩容之后的总字节数。

        返回值:成功扩容之后空间的首地址(可能与之前的一样,也可能不一样),失败返回值NULL

 重置空间:memset

        函数原型:void *memset(void *s, int  c, size_t  n);

        功能:用来重置一片连续的空间(按照字节)

        参数:①重置空间的首地址

                   ②重置空间的字符

                   ③重置空间的大小(用sizeof测试即可)

malloc应用:

         引用:

 指针传递的误区:

        通过指针传递参数时,最大的忌讳就是以为只要参数是指针就可以了,实际上,应该首先确定要修改的变量的类型,然后再将其地址作为参数。如果要修改的变量本身就是指针,就应该将指针的地址作为参数,此时的形参类型就是指向指针的指针。

        例如:

         则正确写法为:

        函数的本质:存在于内存中的一段有头有尾的二进制代码

        调用函数:执行这一段有头有尾的二进制代码

        如何找到这一段代码:找到首地址 

函数指针:

        概念:指向函数的指针

        函数指针的定义格式:

                存储类型   返回值类型  (*指针变量名)(形参列表);

        函数名:函数入口地址,意味着函数调用的时候,就是根据函数名对应的地址空间进行调用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值