
c语言
文章平均质量分 51
七 六 伍
分享一些日常学习经验和开源自己业余玩的项目,也就是当个记录笔记
展开
-
阅读源码之——strcpy()函数源码解读(学习)
当 *src =‘\0’ 的时候为false while()结束。然后:dst++和src++顺序不定,不同的编译器可能顺序不同。const :防止在赋值的给dst的时候发生改变;ret :return ,返回的是dst的首地址。*dst ++= *src++的时序问题。阅读源码是对自己代码质量提升最好的方法。dst :destination的缩写。src:source的缩写。首先:*dst= *src。main.c 的源码。原创 2021-06-06 23:42:22 · 2293 阅读 · 9 评论 -
C语言指针函数、函数指针、函数指针数组
1. 指针函数指针函数就是返回指针值的函数,本质是一个函数。所以指针函数等价于“返回值为指针的函数”。所谓的指针函数也没什么特别的,和普通函数对比不过就是其返回了一个指针(即地址值)而已。指针函数的写法:int* fun(int x,int y);*2.void 类型可以接受任意类型指针。例如:void *p1;char *p2 = “hellp”;p1 = p2;这是没有问题的,任何类型的指针都可以直接赋值给它,无需进行强制类型转换。但需要注意的一点是,void *的类型并不能无需类型原创 2021-02-12 11:43:25 · 210 阅读 · 2 评论 -
c语言中static 函数和普通函数的区别
静态函数在函数的返回类型前加上关键字static,函数就被定义成为静态函数。函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。定义静态函数的好处:<1> 其他文件中可以定义相同名字的函数,不会发生冲突<2> 静态函数不能被其他文件所用。 存储说明符auto,register,extern,static,对应两种存储期:自动存储期和静态存储期。 auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的原创 2021-02-12 01:11:43 · 852 阅读 · 3 评论 -
结构体定义 struct 用法详解和用法小结(记录)
今天看官方源代码的时候 发现源代码中大量使用了 typedef struct 百度了一下,做下记录。typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。具体区别在于:若struct node{ }这样来定义结构体的话。在定义 node 的结构体变量时,需要这样写:struct node n;若用typedef,可以这样写:typedef struct node{}NODE; 。在申请变量时就可以这样写:NODE n;其实就相当于 NODE 是node 的别名原创 2021-02-08 18:29:22 · 976 阅读 · 0 评论 -
C语言中定义bool类型
C语言里面是没有bool(布尔)类型的,C++里面才有,这就是说,在C++里面使用bool类型是没有问题的。bool类型有只有两个值:true =1 、false=0。不过 C语言中可以自己定义咯 #define bool char #define ture 1 #define false 0...原创 2021-02-08 17:51:39 · 16401 阅读 · 6 评论 -
c的面试题目(一)
1、请填写bool , float, 指针变量 与“零值”比较的if语句。提示:这里“零值”可以是0, 0.0 , FALSE 或者“空指针”。例如int 变量n 与“零值”比较的if 语句为:if ( n == 0 )if ( n != 0 )以此类推。(1)请写出bool flag 与“零值”比较的if 语句:【标准答案】if ( flag ) if ( !flag )100 条经典 C语言笔试题目(2)请写出float x 与“零值”比较的if 语句:【原创 2021-02-06 20:20:07 · 24754 阅读 · 11 评论 -
!和~的区别
!和~ (逻辑取反按位取反)在c语言中,!和~均表示取反,这两个的区别在于:! :代表逻辑取反,即:把非0的数值变为0,0变为1;~ :表示按位取反,即在数值的二进制表示方式上,将0变为1,将1变为0;int main(){ int test_data_a,test_data_b,test_data_c; test_data_a = !0;//逻辑运算,0数值转化为1 test_data_b = !10;//逻辑运算,非0数值转化为0 // 按位取反,10的16进制表示为0x00 00原创 2021-01-24 10:35:49 · 13672 阅读 · 0 评论 -
c语言中 char* 和 unsigned char* 的区别
char 和 unsigned char 的区别在C中,默认的基础数据类型均为signed,如定义变量为int,long等,都为有符号的。如果要定义无符号类型,必须显式地在变量类型前加unsigned。char vs unsigned char相同点:在内存中都是一个字节,8位(2^8=256),都能表示256个数字不同点:char的最高位为符号位,因此char能表示的数据范围是-128~127,unsigned char没有符号位,因此能表示的数据范围是0~255实际使用中,如普通的赋值,读写文原创 2021-01-07 17:03:12 · 888 阅读 · 0 评论 -
static关键字用法详解
在程序中使用static变量局部变量普通局部变量是再熟悉不过的变量了,在任何一个函数内部定义的变量(不加static修饰符)都属于这个范畴。编译器一般不对普通局部变量进行初始化,也就是说它的值在初始时是不确定的,除非对其显式赋值。普通局部变量存储于进程栈空间,使用完毕会立即释放。静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。变量在全局数据区分配内存空间;编译器自动对其初始化其作原创 2021-01-07 16:57:51 · 188 阅读 · 0 评论 -
C语言--函数指针(基础)
函数无参数:#include <stdio.h>void hello(){printf(“Hello World\n”);}int main(){void(*fp)() = &hello;fp();return 0;}输出Hello World1函数带参数:#include “stdio”void hello(int i,int b,char *c){printf(“Hello World\n”);}int main(){void(*fp)(int原创 2021-01-02 13:43:56 · 114 阅读 · 0 评论 -
C/C++预处理指令#define,#ifdef,#ifndef,#endif…
C/C++预处理指令#define,#ifdef,#ifndef,#endif…本文主要记录了C/C++预处理指令,常见的预处理指令如下:#空指令,无任何效果#include包含一个源代码文件#define定义宏#undef取消已定义的宏#if如果给定条件为真,则编译下面代码#ifdef如果宏已经定义,则编译下面代码#ifndef如果宏没有定义,则编译下面代码#elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码#endif结束一个#if……#else条件编译块#err原创 2020-12-28 23:00:47 · 463 阅读 · 0 评论 -
extern “C”的作用详解
今天在看stm32程序的时候,出现了一段这个代码:/* Define to prevent recursive inclusion -------------------------------------*/#ifndef __gpio_H ///*防止该头文件被重复引用*/#define __gpio_H#ifdef __cplusplus extern "C" { //#endif/* Includes ------------------------------------原创 2020-12-28 22:45:13 · 368 阅读 · 0 评论 -
c语言之回调函数
一: 首先了解函数指针:函数指针可以像一般函数一样,用于调用函数,传递参数。1.1 程序实例int main(void){ /* p 是函数指针 */ int (* p)(int, int) = & max; // &可以省略 int a, b, c, d; printf("请输入三个数字:"); scanf("%d %d %d", & a, & b, & c); /* 与直接调用函数等价,d = max原创 2020-12-26 21:36:28 · 383 阅读 · 0 评论 -
c语言把一个数组里面的部分值直接复制到另外一个数组
头文件是#include <string.h>,如果要从数组a复制k个元素到数组b,可以这样做memcpy(b,a,sizeof(int)*k);#include <stdio.h> #include <string.h> int main() { int a[5]={0,1,2,3,4}; int b[5]; memcpy(b,a,sizeof(int)*5); for(int i = 0; i < 3; i++) printf("%d "原创 2020-12-24 18:29:16 · 5133 阅读 · 1 评论 -
(void *)ptr 和 (*(void**))是否相同
(void *)ptr 将变量ptr的值强制转换为 void(无类型)的指针(*(void**))ptr 将变量ptr的值强制转换为 (void*)即把一个指向(void类型指针)的指针,求他的值,结果相当于括号里面的(void类型指针)这两个的效果是完全一样的,用前面那种就可以了...原创 2020-12-24 18:22:20 · 1001 阅读 · 1 评论 -
implicit declaration of function 警告解决方法 (函数的隐式说明 项目)
今天在编译的时候,发现出现这个问题 implicit declaration of function是因为函数没有在头文件(.h)定义,这就导致编译的时候没法正确生成.o文件 (有点低级的错误)原创 2020-12-23 23:47:24 · 9022 阅读 · 0 评论 -
怎样把C语言数组中存放的四个十六进制数合并成一个十六进制数,并转换成十进制?
char sDec[4] = {0x05,0xc5,0xb3,0xea};低字节序的情况下. 并且 int 占用 32bit. char sDec[4] = {0x05,0xc5,0xb3,0xea};int val = 0;char *pBuf = (char*)&val;pBuf[0] = sDec[3];pBuf[1] = sDec[2];pBuf[2] = sDec[1];pBuf[3] = sDec[0];这时val==0x05c5b3ea;如果是高字节序那就更原创 2020-12-23 22:32:08 · 2246 阅读 · 2 评论