美文网首页
C语言与缺陷.2

C语言与缺陷.2

作者: 刘向迪 | 来源:发表于2017-03-11 23:15 被阅读0次

非数组的指针

先看一个例子:
     char *r;
     strcpy(r,s);
     strcpy(r,t);

程序的目的是将两个字符串进行拼接并存在一个新的字符串里,但是这样写是不对的,因为在定义时没有让指针指向一个内存空间。跟改方法可以使用char r[100]这样给一个足够大的空间,或者使用malloc库函数。记得在malloc之后要及时释放内存空间。

作为参数的数组申明

看一个例子:
     char hello[]="hello";
     printf("%s\n",hello);

实际上是将数组的第一个元素地址传给函数了。因此将数组作为函数参数毫无意义。C语言会自动将作为参数的数组申明转换为相应的指针申明。注意在其他情况下不一定有这种转换关系。

连接器

  • 如果一个变量出现在所有的函数体之外,那么他就被称为外部变量的定义,如int a说明了a是一个外部整型变量,同时为a分配了存储空间,因为外部没有指定初始值,所以它默认为0。

  • extern int a显式的说明了a的存储空间是在程序的其他地方分配的。从连接器的角度这是对外部变量的引用而不是定义

  • 一个避免定义冲突的好办法是:每个外部变量只在一个地方声明,这个声明的地方一般就放在一个头文件中,需要用到该外部对象的所有模块都应该包括这个文件。特别需要指出的是定义这个外部变量的模块也应该包括这个头文件。

零散点

  • 对于数组结尾之后的下一个元素,取它的地址是合法的,但是读这个元素的值是未定义的。
  • 无符号数没有溢出,只有有符号数运算才会整数溢出,溢出时的结果是未定义的,所以任何逻辑判断都不可靠。一种有效的方式是把有符号数转为无符号数进行边界判断。

相关文章

  • C语言与缺陷.2

    非数组的指针 先看一个例子:char *r;strcpy(r,s);strcpy(r,t); 程序的目的是将两个字...

  • C语言与缺陷

    第一本C语言进阶学习教材 1.字符与字符串 用单引号括起来的一个字符严格表示一个整数,而用双引号括起来的一个字符代...

  • 书籍推荐

    1.《C primer plus》----《C程序设计语言》-----《C和指针》、《C专家编程》、《C缺陷与陷阱...

  • C语言 宏陷阱与缺陷

    1. 不能忽视宏定义中的空格 #define f (x) ((x)-1) 上面的宏定义中展开后变成 (x) ((x...

  • C语言概述

    1、为什么学习C语言 C的起源和发展(机器语言、汇编语言、高级语言(结构化语言(缺陷数据和操作分离)、面向对象语言...

  • ES6基础姿势

    1,变量 Var 的缺陷1-1,可以重复声明,但是在C语言里面不可以;1-2,无法限制修改,即无法设置常量。在C语...

  • C语言中的词法陷阱

    该文章为笔记,因此许多内容摘抄自《C陷阱与缺陷》。《C陷阱与缺陷》,全书不厚,但是感觉十分有提醒与启迪作用,值得阅...

  • 数据结构与算法-目录

    数据结构与算法-目录 C语言篇 数据结构和算法-C语言篇1-绪论数据结构和算法-C语言篇2-初识算法数据结构与算法...

  • 程序员修炼之道

    1、编程语言(高级Java、swift) 2、底层语言(C、C++) 3、设计模式 4、算法与数据结构 5、业务能...

  • C++语言基础(01)

    1.C与C++的关系 1.C++可以与C代码进行混编2.C++面向对象编程语言、C面向过程的编程3.C++对C的一...

网友评论

      本文标题:C语言与缺陷.2

      本文链接:https://www.haomeiwen.com/subject/pnozgttx.html