C和指针_C专家编程_C陷阱与缺陷_C语言编程要点__总结
时间:2026-01-21
时间:2026-01-21
C和指针_C专家编程_C陷阱与缺陷_C语言编程要点__总结
《C和指针》 《C专家编程》 《C陷阱与缺陷》 《C语言编程要点》
《编程精粹--Microsoft编写优质无错C程序秘诀》
总 结
说明:总结的知识点主要源于上面的4本书,《编程精粹--Microsoft编写优质无错C程序秘诀》这本书未做总结,该书有清晰版的pdf格式的电子版。
C和指针_C专家编程_C陷阱与缺陷_C语言编程要点__总结
指针和数组相关概念
************************************************* 字符与字符串的区别 指针与数组1 指针与数组2
指针和数组的相同与不同
用malloc为字符串分配存储空间时的注意事项
作为常数的数组声明(c缺陷与陷阱3.3节.在其它部分有包含该节的知识点,了解or略过) 字符串常量
用字符串常量初始化指针和数组 二维数组下标操作的相关概念 指向一维、二维数组的指针
array_name和&array_name的异同
数组作为函数的参数时,不能通过sizeof运算符得到该数组的大小 用strlen()求字符串的长度
‘char **’ 和 ‘const char **’的兼容性问题 空指针相关的问题 NULL和NUL的区别
未初始化的指针和NULL指针的区别 理解函数的声明 函数参数的传值调用 函数指针
作为函数参数的多维数组 强制类型转换相关概念 可变参数相关问题
malloc()、calloc()、realloc()
在程序退出main()函数之后,还有可能执行一部分代码吗? 总线错误和段错误相关概念
数字和字符串之间转换相关的函数
************************************************* 怎样判断一个字符是数字、字母或其它类别的符号? 怎样将数字转换为字符串? 怎样将字符串转换为数字?
字符串以及内存操作相关函数
************************************************* 字符串拷贝和内存拷贝函数: strcpy strncpy memcpy memmove memccpy bcopy
C和指针_C专家编程_C陷阱与缺陷_C语言编程要点__总结
字符串和内存数据比较函数: strcmp
strcasecmp strncasecmp memcmp strcoll bcmp
连接字符串的函数: strcat strncat
查找字符/字符串的函数: strstr strchr strrchr memchr
其它相关的函数: index rindex strlen strdup memset bzero strspn strcspn strpbrk strtok
数据结构及算法相关函数 qsort() bsearch()
lsearch(线性搜索) lfind(线性搜索)
srand(设置随机数种子) rand(产生随机数)
OTHER
************************************************* 什么是标准预定义宏?
断言 assert(表达式) 相关概念
连接运算符“##”和字符串化运算符"#"有什么作用? 注释掉一段代码的方法 Typedef相关概念 = 不同于 ==
词法分析中的“贪心法” 运算符的优先级问题
C和指针_C专家编程_C陷阱与缺陷_C语言编程要点__总结
变量的存储类型及初始化相关概念 左值和右值相关的概念 变量的值和类型相关的概念 怎样删去字符串尾部的空格? 怎样删去字符串头部的空格? 怎样打印字符串的一部分? 结构的自引用 结构的存储分配
边界计算与不对称边界 整数溢出
返回整数的getchar函数 更新顺序文件 随机数的相关概念
用递归和迭代两种办法解fibonacci
字符与字符串的区别(c缺陷与陷阱1.5
节)
C和指针_C专家编程_C陷阱与缺陷_C语言编程要点__总结
#include <stdio.h> int main() {
char ch = 'abcdefghijklmnopqrstuvwxyz'; char str[] = "abcdefghijklmnopqrstuvwxyz"; printf("-----%c-----\n%s\n",ch, str );
return 0; }
编译该程序可以通过,但是会产生警告;输出结过为: -----z-----
abcdefghijklmnopqrstuvwxyz
// 在Dev-C++ 4.9.9.2编译环境中可以通过,但是在VC6.0中通不过
指针与数组1(c缺陷与陷阱3.1节)
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个元素,是calendar数组中12个有着31个整型元素的数组之一。因此,calendar[4]的行为也表现为一个有着31个整型元素的数组的行为。例如,sizeof(calendar[4])的结果是:31×sizeof(int)。
C和指针_C专家编程_C陷阱与缺陷_C语言编程要点__总结< …… 此处隐藏:6144字,全部文档内容请下载后查看。喜欢就下载吧 ……