随笔分类 - C
发表于 2022-09-05 19:01阅读:352评论:0推荐:0
摘要:直接上代码: size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) { size_t written = fwrite(ptr, size, nmemb, stream); return written; } in
阅读全文 »
发表于 2022-08-19 09:44阅读:781评论:0推荐:0
摘要:请求端: struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/x-www-form-urlencoded"); curl_easy_setopt(curl
阅读全文 »
发表于 2022-07-28 19:38阅读:642评论:0推荐:0
摘要:1.case后加一行代码 switch(cmd) { case CMD_A:break; case CMD_B: printf("加一行打印代码\n"); int test_value; break; default: printf("error cmd\n"); break; } 2.限定作用域
阅读全文 »
发表于 2021-12-06 13:19阅读:903评论:0推荐:0
摘要:####const概念 有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定。例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小。为了满足这一要求,可以使用const关键字对变量加以限定。 const int MaxNum = 100; //班级的最大人数 MaxNum
阅读全文 »
发表于 2021-11-08 17:06阅读:388评论:0推荐:1
摘要:主要实现如下功能 1.红黑树的前中后顺遍历 2.红黑树的创建 3.红黑树的销毁 4.查找"红黑树"中键值为key的节点(递归) 5.查找"红黑树"中键值为key的节点(非递归) 6.返回最小结点的值(将值保存到val中) 7.返回最大结点的值(将值保存到val中) 8.打印红黑树 9.将结点插入到红
阅读全文 »
发表于 2021-06-27 21:49阅读:11957评论:0推荐:4
摘要:题目来源: 1、中兴、华为、慧通、英华达、微软亚洲技术中心等中 外企业面试题目; 2、C 语言面试宝典(林锐《高质量编程第三版》)。 说明: 1、部分C 语言面试题中可能会参杂部分和C++ 相关的知 识,为了保持题目的灵活性故保留,但选题最终还是 会以C 语言题目为主体; 2、以上公司的面试题目已成
阅读全文 »
发表于 2021-06-22 10:24阅读:1778评论:0推荐:0
摘要:引言 其实在我看来定义一个变量后再赋值和定义的时候直接初始化应该是一个意思,现在就来验证一下,之前貌似验证过是一致的,但是我需要留下证据。 code 类型 内容 定义时赋值 #include <stdio.h> int main(){ int a = 10; return 0;} 定义后赋值 #in
阅读全文 »
发表于 2021-06-18 19:54阅读:765评论:0推荐:0
摘要:前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下
阅读全文 »
发表于 2021-06-18 17:46阅读:1199评论:0推荐:0
摘要:前言 我们知道,变量是有数据类型的,用以说明它占用多大的内存空间,可以进行什么样的操作。 除了数据类型,变量还有一个属性,称为“存储类别”。存储类别就是变量在内存中的存放区域。在进程的地址空间中, 常量区、全局数据区和栈区可以用来存放变量的值。 常量区和全局数据区的内存在程序启动时就已经由操作系统分
阅读全文 »
发表于 2021-06-18 17:44阅读:1949评论:0推荐:0
摘要:内存泄漏 使用 malloc()、calloc()、realloc() 动态分配的内存,如果没有指针指向它,就无法进行任何操作,这段内存会一直被程序占用,直到程序运行结束由操作系统回收。 请看下面的代码: #include <stdio.h> #include <stdlib.h> int main
阅读全文 »
发表于 2021-06-18 17:43阅读:1136评论:0推荐:0
摘要:###野指针 如果一个指针指向的内存没有访问权限,或者指向一块已经释放掉的内存,那么就无法对该指针进行操作,这样的指针称为野指针(Wild Pointer)。 指向没有访问权限的内存 请看下面的代码: #include <stdio.h> int main(){ char *str; gets(st
阅读全文 »
发表于 2021-06-18 17:42阅读:2440评论:0推荐:0
摘要:引言 相对于栈而言,堆这片内存面临着一个稍微复杂的行为模式:在任意时刻,程序可能发出请求,要么申请一段内存,要么释放一段已经申请过的内存,而且申请的大小从几个字节到几个GB都有可能,我们不能假设程序一次申请多少堆空间,因此,堆的管理显得较为复杂。 那么,使用 malloc() 在堆上分配内存到底是如
阅读全文 »
发表于 2021-06-18 17:40阅读:1878评论:0推荐:0
摘要:例子1 我们先来看下面的一个例子: #include <stdio.h> int main(){ char str[10] = {0}; gets(str); printf("str: %s\n", str); return 0; } 在 main() 函数内部定义一个字符数组,并通过 gets()
阅读全文 »
发表于 2021-06-18 17:39阅读:1260评论:0推荐:0
摘要:静态内存分配 在进程的地址空间中,代码区、常量区、全局数据区的内存在程序启动时就已经分配好了,它们大小固定,不能由程序员分配和释放,只能等到程序运行结束由操作系统回收。这称为静态内存分配。 动态内存分配 栈区和堆区的内存在程序运行期间可以根据实际需求来分配和释放,不用在程序刚启动时就备足所有内存。这
阅读全文 »
发表于 2021-06-18 17:38阅读:1918评论:0推荐:0
摘要:debug 前面我们只是讲解了一个函数的活动记录是什么样子的,相信大家对函数的详细调用过程的认识还不是太清晰,这节我们就以 VS2010 Debug 模式为例来深入分析一下。 请看下面的代码: void func(int a, int b){ int p =12, q = 345; } int ma
阅读全文 »
发表于 2021-06-18 17:36阅读:733评论:0推荐:0
摘要:函数调用 我们知道,一个C程序由若干个函数组成,C程序的执行实际上就是函数之间的相互调用。请看下面的代码: #include <stdio.h> void funcA(int m, int n){ printf("funcA被调用\n"); } void funcB(float a, float b
阅读全文 »
发表于 2021-06-18 17:30阅读:1670评论:0推荐:2
摘要:引言 函数的调用和栈是分不开的,没有栈就没有函数调用,本节就来讲解函数在栈上是如何被调用的。 栈帧/活动记录 当发生函数调用时,会将函数运行需要的信息全部压入栈中,这常常被称为栈帧(Stack Frame)或活动记录(Activate Record)。活动记录一般包括以下几个方面的内容: 1) 函数
阅读全文 »
发表于 2021-06-18 17:27阅读:4289评论:0推荐:1
摘要:引言 在《Linux下C语言程序的内存布局(内存模型)》中我们讲到,程序的虚拟地址空间分为多个区域,栈(Stack)是其中地址较高的一个区域。栈(Stack)可以存放函数参数、局部变量、局部数组等作用范围在函数内部的数据,它的用途就是完成函数的调用。 栈内存由系统自动分配和释放:发生函数调用时就为函
阅读全文 »
发表于 2021-06-18 17:25阅读:953评论:0推荐:0
摘要:引言 首先我们要解释一个概念——进程(Process)。简单来说,一个可执行程序就是一个进程,前面我们使用C语言编译生成的程序,运行后就是一个进程。进程最显著的特点就是拥有独立的地址空间。 严格来说,程序是存储在磁盘上的一个文件,是指令和数据的集合,是一个静态的概念;进程是程序加载到内存运行后一些列
阅读全文 »
发表于 2021-06-18 17:24阅读:1348评论:0推荐:0
摘要:引言 在32位环境下,Windows 默认会将高地址的 2GB 空间分配给内核(也可以配置为1GB),而将剩下的 2GB 空间分配给用户程序。 内存分布 不像 Linux,Windows 是闭源的,有版权保护,资料较少,不好深入研究每一个细节,至今仍有一些内部原理不被大家知晓。关于 Windows
阅读全文 »