C和指针关键点总结重点.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C和指针关键点总结重点

指针常量与常量指针 Int *P;指向普通整形指针 Int const *p 指向整形常量的指针,指针指向可以改变,但指针指向的值不能改变。 Int *const P指向整形的常指针,指针指向不能改变,但指针指向的值可以改变。 Int const *const P指向整形常量的常指针,指针指向和指针指向的值均不可改变。 ? extern与static区别 作用范围:extern作用于多个文件,类似于头文件,static变量则只在本文件中有效(.c文件)。 声明方式:声明为extern的变量,程序会从别的.c文件中寻找或本文件的mian函数之外的地方找。若在多个文件中声明,则会出错。 ? ? static在本文件中声明,.c文件中有效,初始化一次. ? break/continue/goto loop break:可以使程序运行时中途跳出循环体,即:强制结束循环,接着执行循环体下面的语句。但break仅对循环结构起作用,如for ,while,switch等,对if语句不起作用,且break一次只能跳出一层循环结构。 continue:结束本次循环,即跳出循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。 Goto loop 用于跳跃,一般可用于多层循环结构,从内层的循环结构跳到外面一个位置,并继续执行loop后面的语句。 区别:continue只是结束本次循环,而不终止整个循环的执行,break则强制终止整个循环过程。 位移操作符 左移n位,左侧丢弃n位,右侧添加n位0 右移n位,两种方案:方案一 逻辑移位 左侧补上n位0,方案二 算术移位,左移补上n位(0还是1取决于符号位) 如:c,d,同样右移1位,c增加,d减少 复合运算符 逗号表达式 ? 指针与地址 获取变量所对应的地址,*访问指针变量所表示的地址。 **d=b; a-b-d ? 可变参数列表 stdarg宏 可变参数的限制 ? 指针和下标 应用:数组赋值或者初始化等涉及到数组下标问题时均可以换成指针,来提高运行效率。 ? 结构体自引用 ? ? ? 结构体不完整声明 ? 结构体访问时,-和.号的用法,-是间接访问符号,指针指向结构体,访问结构体成员变量,而.号则为结构体访问,并没有指针参与进来。 ? 函数(结构体)运行效率远小于函数(结构体指针),原因:前一种按照C语???参数传递方式要将参数的一份拷贝传递给函数,而后一种则不需要,但可能存在成员变量被修改的危险,所以可以加上const,为进一步提高效率,也可声明为寄存器指针register. ? 位段好处: 1.能够把长度为奇数的数据包装在一起,节省存储空间,当程序需要使用上千种结构时,使用此法很重要。 2.很方便的访问整形值得部分内容,如磁盘控制器。 malloc分配连续内存,若内存申请成功,返回指向该内存的起始位置的指针,否则返回NULL,因此任意malloc函数,都要对其返回值进行检查确保内存申请成功。 MALLOC宏接受元素的数目能及每种元素的类型,计算总共需要的内存字节数,并调用alloc获得内存。alloc调用malloc并进行检查,确保返回的指针不是NULL。 第一个非比寻常的#define指令,防止因其他代码块直接塞入程序而豆儿直接调用的malloc行为,增加该条指令后,若程序偶尔调用了malloc,程序将因语法错误而无法编译。在alloc中必须加入#undef指令,才能调用malloc而不出错。 警告: 1.不要访问已经被释放的内存,假如你对一个指向动态内存的指针复制了几份分布于程序各处,你无法保证使用其中一个指针时其内存没有被其他指针释放。 2.必须保证内存释放之前,所有指向该内存的指针停止使用。 3.内存不用后,一定要释放,防止内存泄漏! #define NAME stuff #define宏 警告:1.尽量不要使用define宏定义函数,如下#define SQUARE(x) x*x 但a=5;return SQUARE(a+1);结果为11; a+1*a+1 宏和函数 1.宏定义比函数效率和规模上更胜一筹。 2.函数必须指定参数类型,如下,函数很难实现。 3.注意宏参数的副作用,如: 替换成: 较大的值自加两次,较小的值自加一次。 其他指令 错误报告 errno ? 流I/O总览 fopen函数 r:只读,w:只写,+:增加一功能,如r+可读写,w+可读写,b:二进制方式 a:附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留) fseek函数 fseek(fp,long offset,int fromwhere),  HYPERLINK /view/160630

文档评论(0)

麻将 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档