1 / 34
文档名称:

C语言要点总结(精).doc

格式:doc   页数:34页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

C语言要点总结(精).doc

上传人:1259812044 2016/6/28 文件大小:0 KB

下载得到文件列表

C语言要点总结(精).doc

文档介绍

文档介绍:《C 和指针》《C 专家编程》《C 陷阱与缺陷》《C 语言编程要点》总结说明:总结的知识点主要源于上面的 4 本书。--wuliming --2007-04-25 wuliming_sc@ 指针和数组相关概念************************************************* 字符与字符串的区别指针与数组 1指针与数组 2指针和数组的相同与不同用 malloc 为字符串分配存储空间时的注意事项字符串常量用字符串常量初始化指针和数组二维数组下标操作的相关概念指向一维、二维数组的指针 array_name 和&array_name 的异同数组作为函数的参数时,不能通过 sizeof 运算符得到该数组的大小用 strlen() 求字符串的长度‘ char ** ’和‘ const char ** ’的兼容性问题空指针相关的问题 NULL 和 NUL 的区别未初始化的指针和 NULL 指针的区别理解函数的声明函数参数的传值调用函数指针作为函数参数的多维数组强制类型转换相关概念 malloc() 、 calloc() 、 realloc() 字符与字符串的区别(c 缺陷与陷阱 节) #include <> int main() { char ch = 'abcdefghijklmnopqrstuvwxyz'; char str[] = "abcdefghijklmnopqrstuvwxyz"; printf("-----%c-----\n%s\n",ch, str ); return 0; } 编译该程序可以通过,但是会产生警告;输出结过为: -----z----- Abcdefghijklmnopqrstuvwxyz // 在 Dev-C++ 编译环境中可以通过,但是在 中通不过指针与数组 1(c 缺陷与陷阱 节) c 语言中的数组值得注意的地方有以下两点: 1、c 语言中只有一维数组, 而且数组的大小必须在编译期间就作为一个常数确定下来(C99 标准允许变长数组, GCC 编译器中实现了变长数组)。然而,c 语言中数组的元素可以是任何类型的对象, 当然也可以是另外一个数组。这样,要仿真出一个多维数组就不是一件难事。 2 、对于一个数组,我们只能够做两件事:确定该数组的大小,以及获得指向该数组下标为 0 的元素的指针。其他有关数组的操作,哪怕它们乍看上去是以数组下标进行运算的,实际上都是通过指针进行的。换句话说, 任何一个数组下标运算都等同于一个对应的指针运算,因此我们完全可以依据指针行为定义数组下标的行为。现在考虑下面的例子: int i; int *p; int calendar[12][31]; 上面声明的 calendar 是一个数组,该数组拥有 12 个数组类型的元素,其中的每个元素都是一个拥有 31 个整型元素的数组。因此, sizeof(calendar) 的值是: 31 × 12 × sizeof(int) 。考虑一下, calendar[4] 的含义是什么?因为 calender 是一个有着 12 个数组类型元素的数组,它的每个数组类型元素又是一个有着 31 个整型元素的数组, 所以 calendar[4] 是 calendar 数组的第 5 个元素,是 calenda r 数组中 12 个有着 31 个整型元素的数组之一。因此, calendar[4] 的行为也表现为一个有着 31 个整型元素的数组的行为。例如, sizeof(calendar[4]) 的结果是: 31 × sizeof(int) 。又如, p= calendar[4] ;这个语句使指针 p 指向了数组 calendar[4] 中下标为 0 的元素。因为 calendar[4] 是一个数组,我们可以通过下标的形式来指定这个数组中的元素: i= calendar[4][7] ,这个语句也可以写成下面这样而表达的意思保持不变: i= *( calendar[4] +7) ,还可以进一步写成: i= *( *( calendar +4) +7)。下面我们再看: p= calendar; 这个语句是非法的,因为 calendar 是一个二维数组,即“数组的数组”,在此处的上下文中使用 calendar 名称会将其转换为一个指向数组的指针。而p 是一个指向整型变量的指针, 两个指针的类型不一样,所以是非法的。显然,我们需要一种声明指向数组的指针的方法。 int calendar[12][31]; int (*monthp)[31]; monthp = calendar; int (*monthp)[31] 语句声明的*monthp 是一个拥有 31 个整型元素的数组,因此,