1. 三字母词
三字母词即用三个字符合起来表示另一个字符,它可以使C环境在某些缺少一些必需字符的字符集上实现。
??( [ ??< { ??= # ??) ] ??> } ??/ ??! | ??‘ ^ ??- ~
2. 转义字符
\ddd 表示由八进制数ddd的数值所代表的字符
\xddd 表示由十六进制数ddd的数值所代表的字符
3. 字面值前/后缀
(1) 在多字节字符常量前面添加L,则它是宽字符常量。如:L‘X‘, L‘e^‘等。
(2) 在整数字面值后面添加L或l,可以使这个整数被解释为long型;添加U或u则用于把数值指定为unsigned型;两者均添加则被解释为unsigned long型。
4. 当for/while循环体无事可做时,单独用一行来表示一条空语句是个比较好的做法,这样清晰地表明循环体是空的,不至于使人误会接下来的一条语句才是循环体。
while ((ch = getchar()) != EOF && ch != ‘\n‘) ; // 单独用一行来表示空语句是种好做法。
5. 如果你可以互换地使用指针表达式和下标表达式时,应该使用哪一个?从可读性上看,下标显然更好;从效率上看,下标绝不会比指针更有效率,但指针有时会比下标更有效率。
// use array‘s index int arr[10], i; for (i = 0; i < 10; ++i) arr[i] = 0; // 每次循环时都要计算i * 4 // use pointer int arr[10], *ptr; for (ptr = arr; ptr < arr + 10; ++ptr) // 只需在编译时计算一次1*4,运行时不执行乘法 *ptr = 0;
6. 字符串查找
char *strchr(char const *str, int ch); // 寻找字符ch第一次出现的位置 char *strrchr(char const *str, int ch); // 寻找字符ch最后一次出现的位置 char *strpbrk(char const *str, char const *group); // 寻找一组字符中的任意一个第一次出现的位置 char *strstr(char const *s1, char const *s2); // 寻找子字符串s2第一次出现的位置 size_t strspn(char const *str, char const *group); // 寻找字符串前缀 size_t strcspn(char const *str, char const *group ); // 寻找非字符串前缀 char *strtok(char *str, char const *sep); // 分隔并提取字符串
7. 字符分类
isspace(char ch); // 空白字符:‘ ‘, ‘\f‘, ‘\n‘,‘\r‘, ‘\t‘, ‘\v‘ isxdigit(ch); // 十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A~F isalpha(ch); // 字母 isalnum(ch); // 字母或数字 ispunct(ch); // 标点符号,任何不属于数字或字母的可打印符号
8. 内存操作
void *memcpy(void *dst, void const *src, size_t len); void *memmove(void *dst, void const *src, size_t len); void *memcmp(void const *a, void const *b, size_t len); void *memchr(void const *a, int ch, size_t len); void *memset(void *a, int ch, size_t len);
原文:http://www.cnblogs.com/wuhualong/p/ReadingNote_Pointers_On_C.html