ch05 指针

指针 指针声明 [1] 指针/指针变量 (pointer) 是用于存储地址的变量 使用 & 运算符 来访问变量的地址。例如 c 1 2 3 4 5 6 7 #include <stdio.h> void main() { int a = 100; printf("%x", &a); } 输出结果为 16进制的内存地址 c 1 61fe1c 使用地址运算符 * 可以从变量地址中获取变量的值,这个行为被称为间接引用/解引用(indirection/dereferencing)。例如: c 1 2 3 4 5 6 7 8 9 #include <stdio.h> void main() { int a = 100; printf("%d", *(&a)); // 也可以写为,因为*与&优先级相同,从右到左的顺序,所以有没有()意思是相同的 printf("%d", *&a); } 输出结果为 100 指针变量 指针变量是指存储一个变量的地址的变量,可以使用符号 * 来修饰变量,定义语法为:...

 ·  · 

ch06 内存布局

Overview 在编写程序时包含任意指令如,已初始化和未初始化数据,局部变量,函数等都是用于动态分配内存的指令。当程序编译后(默认生成 x.out 文件)这是一个可执行的链接文件( Executable and linking format)。在执行时这些不组织成几部分,包含不同的内存分段 (segments) ELF:这是系统中标准二进制格式,其一些功能包含,动态链接,动态加载,对程序运行时控制。 可以使用 size {ELF_file} 查看被分配的每个段的大小(Linux操作系统); dec 列给出的是这个程序 text + data + bss 段的总大小,用十进制表示 text 段是存储可执行命令的段 data 段包含所有初始化数据,全局与静态变量 BSS 段包含未初始化数据 bash 1 2 3 $ size 1 text data bss dec hex filename 1843 584 8 2435 983 1 Memory Layout in C [1] 在C语言中内存布局模型包含六个部分 命令行参数 (Command Line Arguments) 栈 (Stack) 堆 (Heap) 未初始化数据段 (Uninitialized Data Segment BSS) 已初始化数据段 (Initialized Data Segment) 文本/代码段 (Text/Code Segment) 这6部分结构可以再划分为两种类型:...

 ·  · 

ch07 复合类型

Overview C语言中复合类型 (composite type) 是指用户自定义类型,通常由多种元素组成的类型,其元素被紧密存储在内存中。C语言常见的复合类型有: 数组 字符串 结构体 联合类型 结构体 [1] 结构体 (structure) 是指用户定义的数据类型,允许将不同类型的多个元素组合在一起,来创建出更复杂的数据类型,类似于数组,但又区别于数组,数组只能保存同类型的元素,而结构体可以保存不同类型的元素。 定义 声明结构体的语法如下 c 1 2 3 4 5 6 struct structureName { dataType memberVariable1; datatype memberVariable2; ... } variable01, variable02...; 这里需要注意的一些地方: struct是关键字,structureName定义的新数据类型,variable{}是作为使用 structureName 声明的新变量名 每个成员方法结尾都是 “;" 而不是逗号 ”," 结构体不能递归 变量可以有多个 例如声明一个学生的结构体,而student是作为一个新的数据类型存在 c 1 2 3 4 5 6 struct student { char name[20]; int roll; char gender; }; Notes:在定义(创建)结构体变量前,结构体成员不会占用内存 声明 使用结构体声明变量 也可以一次性定义结构体和声明变量 c 1 2 3 4 5 6 7 8 9 10 11 12 13 struct student { char name[20]; int roll; char gender; } stu1,stu2; // 结构体名称可以省略 struct { char name[20]; int roll; char gender; } stu1,stu2; 赋值 在声明结构体后,student结构体只是自定义数据结构,要使用还需要进行初始化,或者赋值...

 ·  · 

ch08 文件处理

文件类型 文件是指以字节的形式存储的数据源,使用C语言将文件数据以输出输出的形式处理叫做文件处理。 文件在C语言中以两种形式存在: 文本文件:文本文件是简单的文件类型,这些文件内容以 ASCII 字符格式存储信息。 二进制文件:二进制文件以 0 和 1 的二进制格式存储数据,不是人类可读的文件 文件指针 文件指针 (FILE) 是一种数据类型,是被定义在 stdio.h 中的一种结构体,包含了文件的一些信息 c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 typedef struct { // fill/empty level of buffer int level; // File status flags unsigned flags; // File descripter char fd; // ungetc char if no buffer unsigned char hold; // buffer size int bsize; // data transfer buffer unsigned char *buffer; // Current active pointer unsigned char *curp; //Temporary file indicator unsigned istemp; //Used for validity checking short token; } FILE; // This is FILE object 文件指针通常被用于处理正在访问的文件,fopen() 是用于打开文件并返回文件的 FILE 指针,而后通过文件只恨进行I/O操作。fopen() 会发生下列事件:...

 ·  · 

C程序编译错误记录

Question1: Similar to pause command in linux text 1 read -n 1 Question2 read : Illegal option -n 原因为ubuntu 默认的是dash 不是 bash Reference Question3: How to Compile C programing Language text 1 gcc hello.c -o hello Question4: Segmentation fault (core dumped) 编译正常执行错误,在linux中使用 strace 查看具体报错。 Reference

 ·  ·