C语言学习笔记
qw12457125
这个作者很懒,什么都没留下…
展开
-
主函数main
C程序入口——main主函数两种函数原型:1.不带参数的int main()2.带参数的int main(int argc , char *argv[])形参标识符可以不一样,但形参类型和顺序必须一样函数的返回值:程序默认返回0,其他函数必须返回一个值...原创 2019-07-24 15:18:57 · 880 阅读 · 0 评论 -
存储方式和作用域的修饰
register主要用于计数器等变量使用频率比较高的地方。 register修饰变量并不意味着变量将被存储在寄存器中,它意味着变量可能存储在寄存器中,这取决于硬件和实现的限制。 不能对它修饰的变量应用一元的 '&' 运算符(因为它修饰的变量可能没有内存位置)。{ register int miles;}static限制作用域 改变变量的存储区域exte...原创 2019-07-25 20:28:00 · 103 阅读 · 0 评论 -
宏常量与const常量
两者的区别(const的3个优势和2个不一样)1.编译器处理方式不同#define 宏是在预处理阶段展开。 const 常量是编译运行阶段使用。2.类型和安全检查不同#define 宏没有类型,不做任何类型检查,仅仅是展开。 const 常量有具体的类型,在编译阶段会执行类型检查。3.存储方式不同#define宏仅仅是展开,有多少地方使用,就展开多少次,存储于只读存储...原创 2019-07-25 19:59:46 · 601 阅读 · 0 评论 -
linux进程中的内存结构
C程序存储区划分栈(stack):由编译器进行管理,自动分配和释放,存放函数调用过程中的各种参数、局部变量、返回值以及函数返回地址。操作方式类似数据结构中的栈。 堆(heap):用于程序动态申请分配和释放空间。C语言中的malloc和free,C++中的new和delete均是在堆中进行的。正常情况下,程序员申请的空间在使用结束后应该释放,若程序员没有释放空间,则程序结束时系统自动回收。注意...原创 2019-07-25 16:02:51 · 468 阅读 · 0 评论 -
数据类型的存储
整数类型的大小端存储整形数据在内存中存放的是补码,原因在于:使用补码可以将符号位和数值域统一处理; 大端(存储)模式:(大端字节序) 数据的低位保存在内存的高地址处,而数据的高位保存在内存的低地址处。 小端(存储)模式:(小端字节序) 数据的低位保存在内存的低地址处,而数据的高位保存在内存的高地址处。 浮点类型的存储浮点数的存储大小、值范围和精度:浮...原创 2019-07-24 17:44:33 · 279 阅读 · 0 评论 -
结构体内存大小对齐原则、位域
结构体内存大小对齐原则结构体中成员变量分配的空间是按照成员变量中占用空间最大的来作为分配单位,同样成员变量的存储空间也是不能跨分配单位的,如果当前的空间不足,则会存储到下一个分配单位中。补充:结构体变量的首地址能够被其最宽基本类型成员的大小所整除。 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal ...原创 2019-07-30 10:33:58 · 157 阅读 · 0 评论 -
size_t、各种类型的存储大小
size_t的应用size_t 在stddef.h头文件中定义。在其他常见的宏定义以及函数中常用到有:sizeof运算符返回的结果是size_t类型; void *malloc(size_t size)...ssize_tssize_t和size_t类似,但必需是signed(表示 signed size_t类型), 用来表示可以被执行读写操作的数据块的大小。size_t ...原创 2019-07-29 17:11:22 · 1176 阅读 · 0 评论 -
回调函数
回调函数就是一个通过函数指针调用其他函数的函数#include <stdlib.h>#include <stdio.h>// 回调函数void populate_array(int *array, size_t arraySize, int (*getNextValue)(void)){ for (size_t i=0; i<ar...原创 2019-07-29 16:47:51 · 153 阅读 · 0 评论 -
指针
复杂的指针int *(*p(int))[3];可以先跳过, 不看这个类型, 过于复杂从 p 开始,先与 () 结合, 说明 p 是一个函数, 然后进入 () 里面, 与 int 结合, 说明函数有一个整型变量参数, 然后再与外面的 * 结合, 说明函数返回的是一个指针, 然后到最外面一层, 先与[]结合, 说明返回的指针指向的是一个数组, 然后再与 * 结合, 说明数组里的元素是指针, 然...原创 2019-07-29 16:33:18 · 86 阅读 · 0 评论 -
gcc编译命令
gcc命令常用参数gcc -E a.c -o a.i 停止于宏展开阶段 gcc -S a.c -o a.s 停止于汇编阶段 gcc -c a.c -o a.o 停止于目标二进制代码阶段 gcc a.c—>a.out 生成可执行文件gcc参数中目录必须存在gcc hello.c -o target/hello targ...原创 2019-07-24 16:39:06 · 146 阅读 · 0 评论 -
数组
数组的初始化char a[10]="hello world"; //该操作是赋值操作const char *a="hello world"; //该操作是将指针指向只读存储区“hello world”字符串数组名的意义当遇到sizeof() 和 &运算符的时候,数组名表示的是整个数组...原创 2019-07-29 15:46:52 · 70 阅读 · 0 评论 -
内联函数
定义内联函数是用inline关键字修饰的函数 在类内定义的函数被默认成内联函数 内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质作用用来消除函数调用时的时间开销局限递归函数不能定义为内联函数 函数体不能太复杂...原创 2019-07-25 20:59:24 · 98 阅读 · 0 评论