c语言
文章平均质量分 82
Scl_Diligent
平凡
展开
-
线程池:一个锁,两个条件变量,循环队列
线程池,事先创建几个线程,不停取任务,如果没有任务休眠,省去了不停的创建线程销毁销毁线程的事件和资源。原创 2023-12-26 17:36:55 · 468 阅读 · 1 评论 -
不使用循环,求二进制中1的个数
对于2位的二进制数,求其中1的个数。有一个奇妙的算法。(设x , y,z代表二进制中一位比特位的值)已知 i (x1 x2),j = (0 x1)。则i-j 所对应的的十进制数就是 i 中1的个数。i j i - j 00 00 00 01 00 01 10 01 01 11 01 10 那么对于...原创 2019-09-29 22:27:49 · 1711 阅读 · 3 评论 -
.c/.cpp程序生成可执行文件的过程
.c/.cpp文件生成到执行过程预编译:gcc -E main.c -o main.i main.i处理源代码文件中的“#”开始的预编译指令。如“#include”、“#define”等。具体如下: 宏替换:将所有的“#define”删除,并展开所有的宏定义。 处理条件预编译指令,如“#if" "#endif" "#elif" "#else"指令:表达式1为...原创 2018-11-19 18:05:10 · 2654 阅读 · 0 评论 -
malloc()、free()与new、delete的区别
定义与使用:malloc()和free()函数:动态内存分配(申请一块连续的指定大小的内存区域,以void *类型返回分配的内存区域地址)与释放函数(释放malloc函数给变量分配的内存空间)。C++/C语言的标准库函数。void *malloc(size_t size);void free (void *memblock);int *pC =(int *)malloc(si...原创 2018-11-18 19:26:32 · 247 阅读 · 0 评论 -
用于C和C++混合编程的 extern "C"
extern "C":C++语言提供,用来兼容C语言,实现C++代码调用C语言代码。extern "C"{代码段},代码段编译器会按照C语言的方式进行编译。(C++函数标识和C函数标识生成规则不同,所以在自己的环境里无法找到调用函数)extern: 可以置于变量或函数前,以表示变量或函数的定义在别的文件中可以使用。提示编译器遇到该函数时在其他文件中寻找其定义。extern也可用于进行连...原创 2018-11-12 16:24:36 · 268 阅读 · 0 评论 -
带参数默认值的函数
带参数默认值的函数说明:函数有一个或多个的参数有默认值;如float Area(float r = 3.5); int Sum (int a,int b = 5, int c =10)。带参数默认值函数注意:1、默认值参数只能放在函数声明或定义处,一般放在函数声明中。int Fun(int a, int b, int c = 9);int Fun(int a, int b, ...原创 2018-11-12 12:26:51 · 3459 阅读 · 0 评论 -
函数输出参数、不定参函数(printf不定参机制)、函数指针(回调函数、转移表)(c语言)
输出参数:解决函数需要多个返回值。#include <stdio.h>//实现一个函数返回两个值(最大值与最小值)int Max( int *arr,int len, int* min) //传min的地址,对父函数min的值进行修改{ int max= 0; *min = 0; for(int i=0;i <len-1;i++) { if (arr[i...原创 2018-06-02 01:57:53 · 1400 阅读 · 0 评论 -
二进制运算———位运算应用(二进制加减,求整数的二进制中“1”的个数)(C语言)
位运算符: &(按位与)、|(按位或)、^(按位异或)、~(取反)、<<(左移)、>>(右移)。1、 & 按位与:两数对应的二进制数位相与,两数位都为1时,该结果位才为1,否则为0。例如:3 & 5 == (0000 0011 & 0000 0101== 0000 0001)== 12、 |...原创 2018-05-31 23:27:05 · 4713 阅读 · 1 评论 -
认识结构体与声明类型(typede)(c语言)
结构体:一系列具有相同类型或不同类型的数据构成的数据集合。定义:struct 结构体类型名 结构体变量名{成员表列;};如:建立学生信息类型的结构体,(包括学号、姓名、性别、年龄)。struct student st1{ int num; char name[20]; int age;};成员变量赋值: st1={001,"xiaoming",20}; //聚合体初始化结构体变...原创 2018-04-29 01:06:25 · 1259 阅读 · 0 评论 -
结构体struct 的内存对齐问题(c语言)
内存对齐:为了避免移植后,计算机读取数据出错,原创 2018-05-12 23:56:20 · 644 阅读 · 0 评论 -
数组指针和指针数组(C语言)
数组指针:指向数组名的指针,即保存的是首元素的地址。 int arr[]={1,2,3,4,}; //一维素组 int brr[][2]={1,2,3,4}; //二维数组 int crr[][2][2]={1,2,3,4,5,6}; //三维数组 int *pa=arr; //一维指针 int (*pb)[2]=brr; //二维指针 int (*pc)...原创 2018-04-27 13:52:12 · 526 阅读 · 0 评论 -
数据存储——动态内存申请和释放(c语言)
动态内存:malloc函数: 作用:用于申请一块连续的指定大小的内存块区域以(void *)类型返回分配的内存区域地址,当无法知道内存具体位置的时候,就要用到动态分配内存。函数声明:(返回为(void *)类型)void *malloc( size_t size );需要的头文件:#include <stdlib.h>或#include <malloc.h>...原创 2018-04-21 21:02:06 · 2799 阅读 · 1 评论 -
函数的递归调用,其算法复杂度(c语言)——(斐波那契数列,汉诺塔)
递归调用: 递归调用就是在当前的函数中调用当前的函数并传给相应的参数,这是一个动作,这一动作是层层进行的,直到满足一般情况的的时候,才停止递归调用,开始从最后一个递归调用返回。如:用递归实现n的阶乘int Fac(int n){ if(n==0 || n==1) { return 1; } else return Fac(n-1) * n;}当n=5时,Fac(...原创 2018-04-18 00:58:55 · 1078 阅读 · 0 评论 -
“const类型” 的运用,与宏定义(“define”)和(静态变量)“static”的区别(c语言)
用法:(1)数据类型(int、char....)对于const而言是透明的。(const修饰它的直接右边,不能做左值) 如:(const int SIZE =10;)等同于(int const SIZE =10;)(const int * p=&a;)等同于(int const *p=&a;)const int *p1=&a; //只读...原创 2018-04-16 00:53:07 · 1192 阅读 · 0 评论 -
指针的“加、减” 运算,指针存储(c语言)
首先我们来复习指针的基本知识:int a=10; //定义一个整型变量a,并将10赋值给a;int *p=&a; //定义一个整型指针变量p,并将a的地址赋值给p;p=(int *)1000; //将(int)1000强转为整型指针(int *),并赋值给p; 指针变量的大小(4个字节): 在c语言中,内存可以理解为一个字符数组...原创 2018-04-10 15:34:05 · 511 阅读 · 0 评论 -
认识一维数组、字符数组与字符串(c语言)———(逆序数组、字符串简单拷贝)
一、维数组的定义和引用:1、一维数组的定义:类型说明符 数组名 [常量表达式];(int a[10];)2、一维数组的初始化:类型说明符 数组名[常量表达式]={值,值,....};int a[10]={1,2,3,4,5,6}; 相当于: a[0]=1;a[1]=2;a[2]=3;...a[5]=6;剩下的元素a[6],a[7],a[8],a[9]都赋值为0;int a[]={1,2,3,4...原创 2018-04-09 23:09:18 · 1423 阅读 · 0 评论 -
认识指针(c语言),其实指针没有你想的那么难!
int a=10;int b=20;int* p=&a;*p=100;p=&b;*p=200;是不是一头雾水呢?如下是变量初始化: 如同生活中,若想找的这个学生,可以叫他名字,也可以叫他座位号。而指针就是通过“座位号”,来找学生的。一、认识符号。&: 1、取地址运算符(单目运算符);&a这里就是20909984(可以理解为座位号)。 2、按位与运算符(双...原创 2018-03-31 14:25:03 · 889 阅读 · 0 评论 -
指针的应用(c语言)——(子函数实现交换父函数中变量的值)
子函数实现交换父函数中变量的值int main(){int a=10;int b=20;Swap(a,b);//若实现a,b值交换,Swap()函数该怎么写?printf("%d %d\n",a,b);return 0;}子函数——被调用函数(Swap());父函数——调用函数(main());这里是交换a,b 值的三种方法,你认为哪个正确呢?void Swap1(int a,i...原创 2018-04-08 14:19:52 · 688 阅读 · 0 评论