
C语言
文章平均质量分 61
熠熠L
这个作者很懒,什么都没留下…
展开
-
【C语言】C语言实现泛型编程
泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。这里提供一种方法,通过空指针类型void*现交换两个元素内容的函数 swap#include <stdio.h>/** \brief 交换arg1与arg2的值使用空指针类型来实现泛型, * * \param arg1 -- 空指针类型,指向需要交换的数据类型 * \param arg2 -- 空指针类型,指向需要交换的数据类型 * \param type -- 需要交换原创 2022-03-28 21:11:09 · 1903 阅读 · 0 评论 -
【C语言】详解空指针void*
在C语言中,void称为无类型,相应的void*称为无类型指针或者空指针类型。void的应用对函数返回值的限定。例如void func(int);该函数没有返回值。对函数参数类型的限定。例如int func(void);该函数没有参数,不允许接收参数。空指针类型(void*)空指针类型的变量void* pvoid;可以指向任意类型的数据,任何类型的指针也可以直接赋值给空指针类型的变量。#include <stdio.h>int main(){ char c,原创 2022-03-28 15:01:46 · 1286 阅读 · 0 评论 -
【C语言】详解可变参数与函数参数的内存对齐
什么是可变参数?有时,您可能会碰到这样的情况,您希望函数带有可变数量的参数,而不是预定义数量的参数。C 语言为这种情况提供了一个解决方案,它允许您定义一个函数,能根据具体的需求接受可变数量的参数。比如我们最常用的printf函数,它的函数声明是:int printf(const char *format, ...);该函数就是一个典型的应用可变参数的实例,后面那三个...就是说明该函数是可变参数函数。使用可变参数要使用可变函数,得引用一个头文件#include <stdarg.h>该文原创 2022-03-27 22:11:11 · 1167 阅读 · 0 评论 -
【C语言】递归注意点
递归指的是在函数的定义中使用函数自身的方法。void func(int){ /* 代码 */ func(/* 参数 */) //函数调用自己}C 语言支持递归,即一个函数可以调用其自身。但在使用递归时,程序员需要注意定义一个从函数退出的条件,否则会进入死循环。递归是一个简洁的概念,同时也是一种很有用的手段。但是,使用递归是要付出代价的。与直接的语句(如while循环)相比,递归函数会耗费更多的运行时间,并且要占用大量的栈空间。递归函数每次调用自身时,都需要把它的状态存到栈中,原创 2022-03-27 15:34:40 · 1065 阅读 · 0 评论 -
【C语言】类型转换注意点
隐式转换原则隐式地把值强制转换为相同的类型。编译器首先执行整数提升,如果操作数类型不同,则它们会被转换为下列层次中出现的最高层次的类型:常用的算术转换不适用于赋值运算符、逻辑运算符 && 和 ||。强制转换强制类型转换是把变量从一种类型转换为另一种数据类型。#include <stdio.h>int main(){ int i1 = 20, i2 = 7; float f; f = (float)i1 / i2; printf原创 2022-03-27 14:35:06 · 860 阅读 · 0 评论 -
【C语言】预处理注意点
C 预处理器C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。指令描述#define定义宏#include#undef#ifdef#ifndef#if#else#elif#endif#error...原创 2022-03-26 22:37:59 · 639 阅读 · 0 评论 -
【C语言】详解typedef及与define的区别
可以typedef使用它来为类型取一个新的名字。typedef unsigned char BYTE;typedef struct node{ char str[50]; struct node *nextNode;}Node_t;typedef union{ char c; int i;}Union_t;为数组类型取别名#include <stdio.h>typedef int Arr1_t[4];//一维数组类型typed原创 2022-03-25 22:46:00 · 1482 阅读 · 0 评论 -
【C语言】详解位域定义与使用
位域的定义struct bit{ unsigned char b1 : 1;//位宽度为1 unsigned char b2 : 3;//位宽度为3 unsigned char b3 : 3; unsigned char b4 : 1;};struct bit{ unsigned int b1 : 1;//位宽度为1 unsigned int b2 : 4;//位宽度为4 unsigned int b3 : 4; unsigned原创 2022-03-25 21:03:26 · 3042 阅读 · 1 评论 -
【C语言】共用体
共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。定义一个共用体union u1{ char c; int i; float f;};在同一时间只使用一个变量。#include <stdio.h>union u1{ int i; float f;};int main(){ unio.原创 2022-03-25 17:55:47 · 1467 阅读 · 0 评论 -
【C语言】详解结构体
结构体的定义方式一typedef struct _stu{ char name[10]; int age; float score; int class;}stu_t;方式2struct stu{ char name[10]; int age; float score; int class;}stu1;结构体的声明包含了其他的结构体struct COMPLEX{ char string[100]; st原创 2022-03-24 20:58:33 · 1368 阅读 · 0 评论 -
【C语言】函数指针
函数指针的声明typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针类型实例1#include <stdio.h>typedef int (*fun_t)(int, int);int sum(int num1, int num2){ return num1 + num2;}int main(){ fun_t p; p = sum; int a = 3; int b= -4原创 2022-03-24 14:28:26 · 1515 阅读 · 1 评论 -
【C语言】指针的一些见解
一篇关于指针的很好的文章指针指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。int *p;从p开始,p与*结合,说明p是一个指针,再与int结合,说明指针所指向的内容的类型为int型。所以p是一个返回整型数据的指针。char *p;从p开始,p与*结合,说明p是一个指针,再与char结合,说明指针所指向的内容的类型为char型。所以p是一个返回整型数据原创 2022-03-22 20:43:02 · 1016 阅读 · 0 评论 -
【C语言】枚举类型
定义一个枚举类型enum DAY{ MON = 1, TUE, WED, THU, FRI, SAT, SUN};enum DAY day;//或者enum DAY{ MON = 1, TUE, WED, THU, FRI, SAT, SUN}day;没有指定值的枚举元素,其值为前一元素加 1。enum DAY{原创 2022-03-21 20:24:08 · 968 阅读 · 0 评论 -
【C语言】数组使用注意点
数组的初始化一维数组初始化部分元素 int buff[5] = {10, 8, 1}; for(int i = 0; i < 5; i++) printf("%3d", buff[i]);//输出结果为: 10 8 1 0 0表示只给buff[0] ~ buff[2]3个元素赋值,而后面2个元素自动初始化为 0。当赋值的元素少于数组总体元素的时候,不同类型剩余的元素自动初始化值说明如下:对于 short、int、long,就是整数 0;对于 c原创 2022-03-21 17:17:22 · 1849 阅读 · 0 评论 -
【C语言】函数使用中的注意点
函数参数传递的三种方式值传递由于值传递是单向传递,传递过程中只是改变了形参的数值,并未改变实参的数值,因此并不会改变x和y原有的值。void swap(int x, int y){ int temp = 0; temp = x; x = y; y = temp;}指针传递指针传递过程中,将参数的地址分别传递给了x和y,在函数体内部改变了x、y所在地址的值,即交换了数值。void swap(int *x, int *y){ int temp原创 2022-03-20 19:21:26 · 1138 阅读 · 0 评论 -
【C语言】运算符注意点
运用异或交换2个数的值这种利用位运算的交换方法只适用于整型变量,不能用于浮点型变量!#include <stdio.h>int main(){ unsigned char x = 155; unsigned char y = 200;/* x = x ^ y; y = x ^ y; x = x ^ y;*/ x ^= y ^= x ^= y; printf("x = %d, y = %d\n", x, y);}利用位与原创 2022-03-20 16:39:00 · 644 阅读 · 0 评论 -
【C语言】存储修饰符
autoauto 存储类是所有局部变量默认的存储类。{ int x; auto int x;}auto 只能用在函数内,即 auto 只能修饰局部变量。registerregister 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个字),且不能对它应用一元的 ‘&’ 运算符(因为它没有内存位置)。register int i = 0;int *p = &i; //不能对变量i进行取址运算,编译错误er原创 2022-03-20 16:00:40 · 323 阅读 · 0 评论 -
【C语言】整数及浮点数据类型
类型字节大小值范围char1-128 ~ 127unsigned char10 ~ 255short2-32768 ~ 32767unsigned short20 ~ 65535int4-2147483648 ~ 2147483647unsigned int40 ~ 4294967295long4-2147483648 ~ 2147483647unsigned long40 ~ 4294967295long...原创 2022-03-20 15:12:41 · 272 阅读 · 0 评论 -
【C语言】变量的声明与定义
变量的定义char x; //声明且定义变量xint y = 1; //声明且定义变量y,并且初始化变量y变量的声明需要建立存储空间的。char x; //声明且定义变量xint y = 1; //声明且定义变量y,并且初始化变量y不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它。extern char x; //仅声明变量xextern int y = 1; //仅声明变量y注意:一个变量不能同时extern和初始化ex原创 2022-03-19 19:53:58 · 7133 阅读 · 0 评论 -
【C语言】常量
整数常量前缀十进制无,默认是十进制二进制0B / 0b八进制0十六进制0X / 0x后缀无符号整数(unsigned)U / u长整数(long)L / l实例254 //合法,十进制51u //合法,无符号十进制23LL //合法,长整数十进制11U //合法,无符号十进制1111111l //合法,长整数十进制22222L //合法,长整数十进制0B1原创 2022-03-19 21:54:32 · 609 阅读 · 0 评论