摘要:函数指针用作参数 1 - 代码示例 ① 使用函数指针实现函数的动态调用 1 #include <stdio.h> 2 // 定义 BOOL 变量 3 typedef enum{ 4 false, 5 true 6 }BOOL; 7 8 // 存储学生信息 9 typedef struct stu{
阅读全文
摘要:函数指针 1 - 函数指针是指向函数的指针变量,本质是一个指针。声明格式如 int (*maxValue) (int x) 2 - 函数指针只能指向具有特定特征的函数,要求所有被同一指针所指向的函数必须具有相同的参数和返回值类型 比如 void (*func) ( ) 首先执行的是 (*func),
阅读全文
摘要:const 1 - 它的作用增强了程序的安全性,限定一个变量不能被修改 const int a = 10; a = 99;// 编译报错:a 不允许被修改 const int arrayDemo[] = {1,2,3}; arrayDemo[0] = 10;// 编译报错 2 - 修饰指针 1 in
阅读全文
摘要:结构体 1 - 结构体是一种自定义的数据类型,它是由其它几种数据类型构成的 2 - 结构体内存大小:以最大成员变量类型所占的空间为分配单位,按结构体成员声明的顺序自上而下分配。注:结构体所占空间大小理论上应是所有成员所占内存之和,但实际上是最大成员变量所占空间的最小整数倍 3 - 代码示例:使用结构
阅读全文
摘要:结构体指针 1 - 代码示例 ① 结构体指针和结构体数组 1 #include <stdio.h> 2 #include<string.h> 3 // 定义两个结构体 4 typedef struct student{ 5 6 char name[20]; 7 char sex; 8 int age
阅读全文
摘要:数组 1 - 指针对应的数组元素 int ages[5]={10,9,8,7,6}; int *p = ages;// 等同于:int *p = &ages[0]; // 第 1 个元素的地址 p,&ages[0] // 第 2 个元素的地址 p+1,&ages[1] // 第 3 个元素的地址 p
阅读全文
摘要:指针 1 - 字节是最⼩的存储单元,为了正确访问内存单元系统会使每个内存单元都有一个编号,这个编号称作地址。指针就是内存地址,习惯上把内存地址叫做指针。存放内存地址的变量称为指针变量。指针变量所占的字节数跟指针变量的类型无关,它是跟系统位数有关:32 位下占 4 字节;64 位下占 8 字节 注:指
阅读全文
摘要:malloc 1 - 它是堆内存分配函数 ,其对应的返回值类型为 void* ,表示任意类型的指针都可以用它来开辟内存。参数为所需开辟的内存的大小,以字节为单位 int *p = malloc(sizeof(int)*4);// 开辟 4*int 个字节空间 for (int i=0; i<4; i
阅读全文
摘要:内存区域 1 - 栈区:由编译器自动分配释放,用来存放函数的参数值、局部变量等。其操作方式类似于数据结构中的栈 2 - 堆区:一般由程序员分配释放(malloc、free、new、delete)。若程序员不释放,程序结束时可能由操作系统回收。分配方式类似于数据结构中的链表 3 - 全局区:全局变量和
阅读全文
摘要:递归 1 - 递归:就是在运行的过程中自己调用自己。每调用一次就进入新的一层,当最内层的函数执行完毕后,再一层一层地由里到外退出 2 - 构成递归需具备的条件 ① 子问题须与原始问题为同样的事,且更为简单 ② 不能无限制地调用本身,必须有个出口 3 - 代码示例 ① 递归原理 1 #include
阅读全文
摘要:函数 1 - C 程序是由函数构成的,每个函数负责完成一部分的功能,函数将功能封装起来,以供程序调用。函数是具有某种特定功能的代码块 2 - 函数的分类 ① 从函数定义角度分为库函数(printf、scanf、puts、gets、putchar、getchar、strcat 等)和用户定义函数 ②
阅读全文
摘要:宏 1 - 主要功能是做替换。它的使用能让程序更加易于修改。宏不是变量,只是做标记,它不做运算优先级的检查 1 #include <stdio.h> 2 3 #define SUMVALUE(x,y) x+y 4 #define SUMNUM(a,b) (a+b) 5 int main(int ar
阅读全文
摘要:枚举 1 - 如果我们在程序中利用预处理指令 #define 来完成这项工作,代码可能是 #define MON 1 #define TUE 2 #define WED 3 #define THU 4 #define FRI 5 #define SAT 6 #define SUN 7 其实可以定义一
阅读全文
摘要:流程控制结构 1 - 顺序结构:按书写顺序执行每一条语句 2 - 选择结构:对给定的条件进行判断,根据判断结果决定执行哪一段代码 3 - 循环结构:在给定条件成立的情况下,反复执行某一段代码 选择结构 1 - if 语句:如果要在 if 后面定义新的变量,则一定要使用大括号,如 1 if(10 >
阅读全文
摘要:字符串 1 - 字符串一定以 \0 结尾,它实质上是字符数组 printf("mark\n");// 字符串常量实质是 'm'+'a'+'r'+'k'+'\0'组成 2 - 通常使用字符数组来存储字符串 char name[10] = "Bruce";// 在指定大小时,要确保数组的大小比预定的大一
阅读全文
摘要:数组训练营 1 - 互换两个数组数据元素 1 // 两行三列 2 int array1[2][3] = {{1,2,3},{4,5,6}}; 3 // 三行两列 4 int array2[][2] = {11,12,13,14,15,16}; 5 // 遍历输出 6 printf("交换前 \n")
阅读全文
摘要:二维数组 1 - 下面代码行的内存状况 char Y[3][2]={{'A','B'},{'C','D'},{'E','F'}}; 2 - 二维数组的声明 int agesII[3][10];// 存放 3 个数组且每个数组存放 10 个数值,共 3x10 个数据元素 1 // 两行三列:数组第二维
阅读全文
摘要:前言 1 - 只能存放一种类型的数据,数组里的数据称为元素。平常我们所说的数组,没有特殊说明的话,都是指一维数组 2 - 数组声明包括三要素:类型修饰符 、数据名、 数组元素的个数 3 - 数组初始化时元素个数应是常量或者常量表达式,不能是变量 int agrs[5];// 系统会在内存中开辟 20
阅读全文
摘要:变量存储 1 - 字节与地址 ① 内存以字节为单位,每个字节都有自己的内存地址。计算机中通常以十六进制表示地址 ② 不同类型占用的字节是不一样的,在 64 位编译器下 int 型占据 4 个字节,char 型占据 1 个字节 2 - 存储分析 ① 假设有 int a=1;int b=2;内存分析如下
阅读全文
摘要:变量 1 - 变量名实际上是一个符号地址,是在编译连接时由系统分配给每一个变量的 2 - 基本类型变量 ① 字符型:char ② 整型: int ③ 实型: float、double ④ 无值型:void 表示一个函数不返回任何值或产生一个通用类型的指针 3 - 为什么定义的变量有很多的类型 ? ①
阅读全文