![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
《c和指针》笔记
TODD911
热爱计算机
展开
-
《c和指针》笔记--trigrph
在ANSI标准中,定义了“三字母词”,或者成为“三联符序列”,英文为"trigraph sequences"。目的主要是为了在一些特定的字符集中,比如一些七位代码集中,解决一些特定字符的输入问题。 也许是由于这些字符集我们基本上用不到,所以在大多数C语言的书籍中,我们都看不到对“三字母词”的讲解。这里资料来源于参考ANSI C99标准(即传说中的《American Nati原创 2013-04-24 20:55:18 · 1213 阅读 · 0 评论 -
《c和指针》笔记--strsep淘汰strtok
strsep和strtok是c语言中对字符串进行分割的函数,关于具体用法本篇不做详细说明。这里只说明下2个函数的不同和相同之处。1.strsep淘汰strtok注:摘自Linux内核2.6.29,说明了这个函数已经不再使用,由速度更快的strsep代替。 /* * linux/lib/string.c * * Copyright (C) 1991, 19原创 2013-05-11 15:28:55 · 2795 阅读 · 0 评论 -
《c和指针》笔记--printf()用法
本文转载于:http://hi.baidu.com/bali_bao/item/f90a4f76121b113a6dc37c4bprintf()用法详解 一、printf()函数是式样化输出函数, 一般用于向准则输出设备按规定式样输出消息。正在编写步骤时经常会用到此函数。printf()函数的挪用式样为: printf("",);转载 2013-05-23 21:09:58 · 1566 阅读 · 0 评论 -
《c和指针》笔记--八皇后问题
八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。一共有92种答案。c代码实现如下:#include #define SIZE 8static int board[SIZE][SIZE];void insertQue原创 2013-05-10 22:22:20 · 1474 阅读 · 1 评论 -
《c和指针》笔记-简洁的二叉查找树删除node方法
之前写过一个二叉查找树,其中最麻烦的是删除元素的方法,一共分了8种情况,主要是要区分是否是根节点和非根节点,写的太烦了,详细请参见:http://blog.csdn.net/todd911/article/details/8471566今天要来简化一下这个方法,之前我还写过一篇《简洁的单项链表插入操作》,利用双指针,简化了根节点和非根节点的区别,详细请参见:http://blog.cs原创 2013-06-02 13:11:10 · 1571 阅读 · 0 评论 -
《c和指针》--再谈多维数组
#include int main(void){ int a[2][3]; printf("%p\n",a); printf("%d\n",sizeof(a)); printf("%p\n",a+1); printf("%d\n",sizeof(a+1)); printf("%p\n",*(a+1)原创 2013-05-06 21:50:20 · 1168 阅读 · 0 评论 -
《c和指针》笔记--让rand更随机一点
在c语言中如果要获取1~10的随机数,那么可能大部分人的想法都是通过以下代码获取:rand()%10+1;(虽然rand生成的是一个伪随机数,但是这边姑且认为他是真随机的吧)但是生成1~10的概率真的是一样的吗?不是的,下面我们来分析以下。假如rand返回的最大值为105,那么使用上面那种方法获取的随机数那么生成1~6的概率要比生成7~10的概率要大,看出来了吗?因原创 2013-06-01 14:49:12 · 1232 阅读 · 0 评论 -
《c和指针》笔记--梳理一下fgetc,getc,getchar,fputc,putc,putchar....
输入输出函数家族家族名 目的 可用于所有的流 只用于stdin和stdout getchar 字符输入 fgetc,getc getcharputchar 字原创 2013-05-20 22:47:15 · 2869 阅读 · 0 评论 -
《c和指针》笔记--不能小看了fopen的mode参数
r+具有读写属性,从文件头开始写,保留原文件中没有被覆盖的内容。w+具有读写属性,写的时候如果文件存在,会被清空,从头开始写。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 a 以附加的方式打开只写文件。若文件不存在原创 2013-05-26 14:50:40 · 1389 阅读 · 0 评论 -
《c和指针》笔记--getchar()与EOF
本文章基于:http://www.cnblogs.com/QLinux/articles/2465329.html,稍作了修改。大师级经典的著作,要字斟句酌的去读,去理解。以前在看K&R的The C Programming Language(Second Edition)中第1.5节的字符输入/输出,很迷惑getchar()和EOF的行为。因此,感觉很有必要总结一下,不然,很多转载 2013-04-29 09:33:31 · 1492 阅读 · 0 评论 -
《c和指针》笔记--#line宏
宏#line改变_LINE_与_FILE_的内容,它们是在编译程序中预先定义的标识符。 基本形式如下: # line number [ "filename"] 其中的数字为任何正整数,可选的文件名为任意有效文件标识符。行号为源程序中当前行号,文件名为源文件的名字。宏#line主要用于调试及其它特殊应用。#include int main(void原创 2013-05-19 10:48:19 · 1625 阅读 · 0 评论 -
《c和指针》笔记--转义符\ddd和\xddd
书中有如下描述:\ddd ddd表示1~3个八进制数字,这个转义符表示的字符就是给定的八进制值所代表的字符\xddd 与上例类似,只是八进制数换成了16进制数。注意,任何十六进制数都有可能包含在\xddd序列中,但如果结果值的大小超过了表示的字符范围,其结果就是未定义。问题:为什么直说了\xddd呢,那\ddd,如果超过了表示字符的范围,会怎样呢。于是做了如下测试原创 2013-04-25 20:11:59 · 2730 阅读 · 0 评论 -
《c和指针》笔记--sizeof(i=1+2)
#include int main(void){ int i=0; printf("%d\n",sizeof(i=1+2)); printf("%d\n",i); return 0;}上面的代码运行结果为:40因为判断表达式的长度不需要对表达式进行求值,所以sizeof(i=1+2)并没有对i进行原创 2013-04-27 19:09:08 · 1061 阅读 · 0 评论 -
《c和指针》笔记--a++和++a不是变量
#include #include int main(void){ int i=0,j=0; i++ = 10; ++j = 10; return EXIT_SUCCESS;}上面的编译时会出现一下错误:aplus2.c:6:6: error: lvalue required as left operand of as原创 2013-04-27 21:41:07 · 3222 阅读 · 5 评论 -
《c和指针》笔记--表达式作为左值或右值
下面的代码,大家猜下结果分别是多少?#include int main(void){ int i=1; int* cp = &i; printf("%d\n",++*cp++); return 0;}#include int main(void){ int i=1; i原创 2013-05-01 16:41:32 · 1205 阅读 · 0 评论 -
《c和指针》--宏可变参数
VA_LIST 是在C语言中解决变参问题的一组宏,定义在头文件下。VA_LIST的用法: (1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针 (2)然后用VA_START宏初始化变量刚定义的VA_LIST变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数。 (3)然后用VA_ARG返回可变的参数,VA_AR原创 2011-06-23 15:19:00 · 1783 阅读 · 0 评论 -
《c和指针》笔记--宏插入到字符串常量
方法一:#include #define PRINT(FORMAT,VALUE) \ printf("the value is "FORMAT"\n",VALUE);int main(void){ int x = 6; PRINT("%d",x+2); return 0;}运行结果:the value is原创 2013-05-18 10:53:03 · 1979 阅读 · 2 评论 -
《c和指针》笔记--简洁的单项链表插入操作
单项链表插入操作,我想应该是最基础不过的东西,今天要介绍的是比较简洁的版本。需求:插入一个node到链表的正确位置,当前链表中节点的value已经按照由小到大进行排列。传统的插入操作:int insertNode(Node** rootp,int new_value){ Node *current; Node *previous; Node *new; current原创 2013-05-17 20:03:23 · 1872 阅读 · 0 评论 -
《c和指针》笔记--getopt函数
本文章基于http://jesserei.blog.163.com/blog/static/121411689200983081421390/ ,稍微进行了修改通常 Linux 下的各种命令都有许多的命令行参数可以选择,比如:gcc -g -lm foo.c -o foo getopt()就是用来分析命令行参数的函数。在继续讨论getopt 之前,先要明确两个概念:选项(optio转载 2013-05-18 12:36:32 · 1068 阅读 · 0 评论 -
《c和指针》笔记--包含位域结构体的内存对齐(32bit,GCC)
C99规定int、unsigned int和bool可以作为位域类型。但编译器几乎都对此作了扩展,允许其它类型类型的存在。如果结构体中含有位域(bit-field),总结规则如下:(以下代码在x86 32bit系统上测试,gcc 4.1.2)1) 如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止例:s原创 2013-05-12 14:21:18 · 1602 阅读 · 0 评论