C陷阱与指针--读书笔记
来源:互联网 发布:mac硬盘清理工具 编辑:程序博客网 时间:2024/06/05 08:18
边界计算
两个原则
- 考虑最简单情况下的特例
- 仔细计算边界
示例说明
#include <string.h>#include <stdio.h> int main(void){ int i = 0, a[10] ={0}; for (i = 1; i <=10; i++) a[i] = 0; printf("\n"); return 0;} 结果:会陷入死循环
原因分析
实际上不存在a[10],如果用来编译程序的编译器按照内存地址递减的方式来给变量分配内存,那么数组a之后的一个字实际上分配给变量i
外部类型
外部类型与定义要保持一致
示例说明
一个文件:char filename[] = "/etc/passwd";另一个文件:extern char *filename; 分析:第一个声明是字符数组,第二个声明是字符指针,两者的类型是不同的。
正确的示例
方法一:一个文件:char filename[] = "/etc/passwd";另一个文件:extern char filename[]; 方法二:一个文件:char *filename = "/etc/passwd";另一个文件:extern char *filename;
宏不是类型定义
示例说明
#define T1 struct foo *typedef struct foo *T2 T1和T2都是指向foo的指针 但是如下声明,就有问题T1 a, b;T2 a, b; 第一个声明扩展为:struct foo *a, b; (a为指针,b定义一个结构)
空白字符在printf中的作用
空白字符:如果某数是一个非负数,就在它的前面插入一个空白字符
#include <stdio.h>#include <string.h> int main(void){ int i = 0; for(i = -3; i <= 3; i++) printf("% d\n", i); return 0;}结果:[root@f8s traps_and_pointer]# ./a.out -3-2-1 0 1 2 3
两个格式码
%p用于打印一个指针,%n用于指出已经打印的字符数
#include <stdio.h>#include <string.h> int main(void){ int number = 0; printf("hello\n%n", &number); printf("number=%d\n", number); printf("pointer of number %p\n", &number); return 0;}结果:[root@f8s traps_and_pointer]# ./a.out hellonumber=6pointer of number 0xbf8b7ab0
0 0
- C陷阱与指针--读书笔记
- 20100601--c陷阱与指针读书笔记(第四五六章)
- C陷阱与指针
- 《C陷阱与缺陷》读书笔记
- C陷阱与缺陷 读书笔记
- 《C陷阱与缺陷》读书笔记
- C陷阱与缺陷 读书笔记
- 《c陷阱与缺陷》读书笔记
- 《C陷阱与缺陷》读书笔记
- 【读书笔记】C陷阱与缺陷
- 《C陷阱与缺陷》读书笔记
- 《C缺陷与陷阱》读书笔记
- C陷阱与缺陷读书笔记
- 《C陷阱与缺陷》读书笔记
- C陷阱与缺陷读书笔记
- 《C陷阱与缺陷》读书笔记
- 《C陷阱与缺陷》读书笔记
- C陷阱与缺陷 读书笔记
- 5样家居用品别舍不得扔
- 15分钟学会使用Git和远程代码库
- linux 之shell编程
- boost::regex处理中文方法
- 短信分享
- C陷阱与指针--读书笔记
- 设计模式之三工厂
- [ACM] hdu 1465 不容易系列之一(错排复习)
- Java Web 三层架构详解
- 使用openssl解密c#的DESCryptoServiceProvider的密文
- 【LeetCode】Binary Tree Preorder Traversal
- Windows核心编程(七)用户模式下的线程同步
- delphi中cardinal类型
- 在安卓下控制基于树莓派的小车 皆用python实现