c
A.Crocodile
这个作者很懒,什么都没留下…
展开
-
CRC16常见几个标准的算法及C语言实现
CRC16常见的标准有以下几种,被用在各个规范中,其算法原理基本一致,就是在数据的输入和输出有所差异,下边把这些标准的差异列出,并给出C语言的算法实现。CRC16_CCITT:多项式x16+x12+x5+1(0x1021),初始值0x0000,低位在前,高位在后,结果与0x0000异或CRC16_CCITT_FALSE:多项式x16+x12+x5+1(0x1021),初始值0xFFFF,低...转载 2019-11-27 10:02:29 · 611 阅读 · 0 评论 -
一些c中常用的功能函数
判断一个数是否为素数int prime(int x){ int count = 0; int i; for (i = 1; i <= x; i++) { if (0 == x%i) { count++; } } if (2 == count) {原创 2017-05-08 19:19:49 · 398 阅读 · 1 评论 -
C语言中static关键字的作用
在C语言中static的作用如下第一、在修饰变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。 第二、static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。 第三、static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static转载 2017-07-21 11:03:58 · 731 阅读 · 0 评论 -
C语言中的回调函数(Callback Function)
C语言中的回调函数(Callback Function)1 定义和使用场合回调函数是指 使用者自己定义一个函数,实现这个函数的程序内容,然后把这个函数(入口地址)作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数。函数是你实现的,但由别人(或系统)的函数在运行时通过参数传递的方式调用,这就是所谓的回调函数。简单来说,就是由别人的函数运行期间来回调你实现的函数。这一设计允...转载 2018-04-11 09:37:58 · 1771 阅读 · 0 评论 -
C语言中static关键字的作用详解,全网最透彻
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容复制代码代码如下:char a = 'A'; // global variablev...原创 2018-07-09 09:41:29 · 42931 阅读 · 13 评论 -
LINUX线程同步:原子操作、锁、二元信号量、信号量、互斥量、临界区、读写锁、条件变量等
注:摘自《程序员的自我修养》相关章节。 原子操作共享数据(全局变量或堆变量)的自增(++)操作在多线程环境下会出现错误是因为这个操作(一条c语句)被编译为汇编代码后不止一条指令,因此在执行的时候可能执行了一半就被调度系统打断,去执行别的代码。我们把单指令的操作称为原子的(Atomic),因为无论如何,单条指令的执行是不会被打断的。为了避免出错,很多体系结构都提供了一些常用操作的原子指令,例如i38...转载 2018-07-10 16:53:50 · 613 阅读 · 1 评论 -
C语言中函数参数的省略号
C++允许定义形参个数和类型不确定的函数。例如,C语言中的标准函数printf便使用这种机制。在声明不确定形参的函数时,形参部分可以使用省略号“…”代替。“…”告诉编译器,在函数调用时不检查形参类型是否与实参类型相同,也不检查参数个数。例如:void ConnectData(int i,...)在上面的代码中,编译器只检查第一个参数是否为整型,而不对其他参数进行检查。对于可变参数的函数,需要进行特...转载 2018-07-05 14:59:52 · 1047 阅读 · 0 评论 -
枚举类型详解
注:以下全部代码的执行环境为VC++ 6.0在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是:#define MON 1#define TUE 2#define WED 3#define THU 4#define FRI 5#define SAT 6#define SUN 7 在此,我们定义一种新的数据类型,希望...转载 2018-07-05 15:51:51 · 247 阅读 · 0 评论 -
详解C中volatile关键字
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short flag;void ...转载 2018-07-05 16:46:36 · 149 阅读 · 0 评论 -
Linux编程之自定义消息队列
我这里要讲的并不是IPC中的消息队列,我要讲的是在进程内部实现自定义的消息队列,让各个线程的消息来推动整个进程的运动。进程间的消息队列用于进程与进程之间的通信,而我将要实现的进程内的消息队列是用于有序妥当处理来自于各个线程请求,避免一窝蜂的请求而导致消息的异常丢失。想想socket编程里的listen函数吧,里面要设置一个队列长度的参数,其实来自网络的请求已经排成一个请求队列了,只是这个队列是系统...转载 2018-07-13 14:48:21 · 239 阅读 · 0 评论 -
C语言数组指针
数组(Array)是一系列具有相同类型的数据的集合,每一份数据叫做一个数组元素(Element)。数组中的所有元素在内存中是连续排列的,整个数组占用的是一块内存。以int arr[] = { 99, 15, 100, 888, 252 };为例,该数组在内存中的分布如下图所示:定义数组时,要给出数组名和数组长度,数组名可以认为是一个指针,它指向数组的第 0 个元素。在C语言中,我们转载 2017-04-27 23:14:24 · 245 阅读 · 0 评论 -
数组边界问题
先来看一段程序吧,在程序中讲问题#include <stdio.h>int prime(int x);int main(){ int n; int a[301];//设置数组长度是301 int b[300]; int i = 0; int j; int sum; int *p; int count = 0; printf("原创 2017-05-09 22:48:11 · 1740 阅读 · 0 评论 -
C/C++常用头文件及函数汇总
转自:http://blog.csdn.NET/thisispan/article/details/7470335C/C++头文件一览C#include //设定插入点#include //字符处理#include //定义错误码#include //浮点数处理#include //对应各种运算符转载 2017-05-06 23:34:49 · 382 阅读 · 0 评论 -
C语言数组
使用const声明数组有的时候需要把输入设置为只读,这样程序员只能从数组中检索值,而不能把新值写入数组。要创建只读数据库,应该用const声明和初始化数组。const int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};这样修改后,程序在运行过程中就不能修改该数组中的内容。一旦声明为const便不能再给他赋值。数组初始化的一些原创 2017-04-28 21:15:32 · 448 阅读 · 0 评论 -
linux下C结构体初始化
引子在看Linux netlink部分的时候看到了这样的写法struct netlink_kernel_cfg cfg = { .groups = RTNLGRP_MAX, .input = rtnetlink_rcv, .cb_mutext = &rtnl_mutex, .flags = NL_CFG_NONROOT_RECV};同时我由找到相关结构转载 2017-04-29 20:44:06 · 509 阅读 · 0 评论 -
C语言结构体
在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:struct 结构体名{ 结构体所包含的变量或数组};结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员。请看下面的一个例子:struct stu{ char *name; //姓名 int n转载 2017-04-29 20:59:39 · 473 阅读 · 0 评论 -
函数、数组和指针的形参
关于函数的形参有一点要注意,只有在函数原型或者是函数定义头中,才可以使用int a[]代替int *a;如:int sum (int a[],int n);int *a形式和int a[]形式都表示a是指向int的指针。但是,int a[]只能用于声明形式参量。第二种形式(int a[])则是提醒指针a指向的不止只一个int型变量,还是一个int类型数组的元素。声明数组形参原创 2017-04-30 16:34:31 · 731 阅读 · 0 评论 -
c语言链表
c语言链表1. 链表介绍C语言的单向链表翻转是面试官常问问题之一,故此,咱就谈一谈,链表并不是如此可怕,学不会,想不通.链表和数组一样都是存储数据,链表是非连续,非顺序的存储结构.链表是灵活的内存动态管理(随机分配空间),删除创建结点非常方便链表组成:由一系列结点组成.链表结点:实际上是结构体变量.typedef struct _LINKNO转载 2017-05-01 23:23:59 · 387 阅读 · 0 评论 -
C语言中局部变量与全局变量在内存中的存放位置
C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register)1----局部变量和全局变量在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称变量的作用域。不仅对于形参变量,C语言中所有的量都有自己的作用域。变量说明的转载 2017-05-10 21:43:54 · 928 阅读 · 0 评论 -
const 修饰函数参数,返回值,函数体,保护数据
一、const 介绍1、const 定义const 修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。2、const 目的const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点(后面会讲到 const 与 宏的区别)。3、const 作用1)可以定义 const 常量,具有不可变性。例如:转载 2017-05-05 09:55:53 · 913 阅读 · 1 评论 -
C语言链表使用详解
1. [代码]demo1 ?1234567891011121314151617181920212223242526272829转载 2017-05-05 23:52:44 · 486 阅读 · 0 评论 -
C语言面试题
1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。#define MIN(A,B) ((A) 注意大小写的问题、括号的问题4. 嵌入式系统中经常要用到无限循环,你怎么转载 2017-05-06 23:13:57 · 435 阅读 · 0 评论 -
c语言指针
(1)指针的含义指针就是地址,凡是出现指针的地方,都可以用地址代替。变量的指针就是变量的地址,指针变量就是地址变量。要区别指针和指针变量。指针就是地址本身,而指针变量是用来存放地址的变量。(2)指向地址就意味着指向,通过地址能找到具有该地址的对象。只有与指针变量的基类型相同的数据的地址才能存放在相应的指针变量中。int a;int *p;p = &a; //合法p =原创 2017-04-27 23:32:53 · 449 阅读 · 0 评论