![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言
文章平均质量分 50
兔头哥哥
正在积极治疗秃顶
展开
-
c语言:24、大小端序
c语言:24、大小端序1、字节序(什么大端序小端序)2、C语言判断当前环境字节序3、C语言整型端序切换1、字节序(什么大端序小端序)大端序:更多用于网络传输(跟网络传输协议规定有关)小端序:cpu的数据处理2、C语言判断当前环境字节序//判断当前字节序,返回0表示小端序,返回1表示大端序int IsBigEndian(){ union { char c[2]; short s; } value = {.s=0x0100}; return原创 2021-12-18 16:02:34 · 938 阅读 · 0 评论 -
c语言:23、Enum类型(枚举类型)
c语言:23、Enum类型(枚举类型)若一种数据类型的取值只有少数的几种可能,且每种取值都有自己的含义,为了提高代码可读性,可以将他们定义为Enum类型,中文名为枚举。enum colors {RED,GREEN,BLUE};printf("%d\n", RED);//0printf("%d\n", GREEN);//1printf("%d\n", BLUE);//2上例中,假设程序里面需要三种颜色,就可以用enum命令,把这三种颜色定义为一种枚举类型colors,它只有三种取值可能RED、转载 2021-12-12 18:01:35 · 640 阅读 · 0 评论 -
c语言:13.9、C语言指针实现快排算法
#include <stdio.h>#include <stdlib.h>#include <time.h>#define PRINT_INT_ARRAY(arr, len) \for(int i=0; i<len; i++){ \ printf("%d,", arr[i]); \} \printf("\n");void SwapInt(int *a, int *b){ int temp = *a; *a = *b;原创 2021-12-05 22:10:49 · 618 阅读 · 0 评论 -
c语言:13.8、交换变量例子
c语言:13.8、交换变量例子#include <stdio.h>#include <stdlib.h>#include <string.h>void SwapInt(int *left, int *right){ int temp = *left; *left = *right; *right = temp;}void Swap(void *left, void *right, size_t size){ void *temp原创 2021-12-05 21:41:21 · 427 阅读 · 0 评论 -
c语言:13.7、typedef关键字定义指针函数
c语言:13.7、typedef1、定义函数指针类型2、其他使用例子1、定义函数指针类型typedef int (*Func)(int, double);int Add(int left, double right){ return left + (int)right;}int main(){ Func fun = &Add; fun(1, 1.1); return 0;}2、其他使用例子//使用数字充当bool类型typedef int Boolean;Boolean原创 2021-12-05 20:45:48 · 1098 阅读 · 0 评论 -
c语言:13.6、函数指针
c语言:13.6、函数指针1、函数指针代码例子2、容易混淆的写法1、函数指针代码例子#include <stdio.h>#include <stdlib.h>#define PRINT_INT_ARRAY(arr, len) \for(int i=0; i<len; i++){ \ printf("%d,",arr[i]); \}#define ARR_LENGTH 3void InitArray(int **ptr, int len, int defa原创 2021-12-05 20:13:04 · 223 阅读 · 0 评论 -
c语言:13.5、动态内存分配指针
c语言:13.5、动态内存分配1、malloc2、calloc3、realloc4、注意5、常见分配内存指针使用错误6、动态内存使用建议1、malloc在堆内存中分配指定的空间,需要手动释放。#include <stdlib.h>int main(){ int *p = malloc(sizeof(int)); free(p); return 0;}2、calloccalloc和malloc很类似,但是会默认将指针的值进行初始化int main(){原创 2021-12-05 15:11:43 · 1104 阅读 · 0 评论 -
c语言:13.4、指针例子
c语言:13.4、指针例子1、指针的指针作为函数参数1、指针的指针作为函数参数#include <stdlib.h>#include <stdio.h>#define PRINT_INT_ARRAY(arr, length) \for(int i=0; i<length; i++){ \ printf("%d,", arr[i]); \} \printf("\n");#define PLAYER_COUNT 10void InitI原创 2021-12-05 13:44:55 · 430 阅读 · 0 评论 -
c语言:13.3、指针作为函数的返回值
在clion编辑器中使用汇编编译器Compiler Explorer可以得知,C语言返回值底层会发生返回值拷贝。因此使用指针参数作为返回值可以达到下方两个好处:1、避免函数返回值带来的开销2、实现函数的多个返回值的目的...原创 2021-12-05 12:40:02 · 377 阅读 · 0 评论 -
c语言:13.2、指针、指针的指针、只读指针
c语言:13.2、指针语法1、定义指针及指针的指针1、定义指针及指针的指针 int a = 10; int *p = &a; int **p2 = &p; printf("a :%d\n",a); printf("*p :%d\n",*p); printf("p2 :%x\n",p2);//p的地址 printf("*p2 :%x\n",*p2);//p2指向的指针p指向的变量的地址 printf("p :%x\原创 2021-10-30 15:39:21 · 369 阅读 · 0 评论 -
c语言:22、字符函数(ctype、stdlib)
c语言:22、字符串函数1、ctype.h2、stdlib.h2.1、atoX系列函数2.2、strtoX系列函数1、ctype.hctype.h头文件中定义了一系列对字符的数据类型的判断更多函数请参考:http://c.biancheng.net/ref/isalnum.html#include <stdio.h>#include <ctype.h>#define PRINTF(format, ...) printf("("__FILE__":%d) %s: "for原创 2021-10-20 20:46:54 · 397 阅读 · 0 评论 -
c语言:21、条件编译
c语言:21、条件编译1、条件编译2、函数中使用条件编译3、c代码中给c++使用1、条件编译3种条件编译#1. ifdef 如果定义了#2. ifndef 如果没定义#3. if 如果...##endif#if defined(MACRO) 等价于 #ifdef MACRO例子:判断语言运行的系统版本#if defined(__unix__) || defined(__GYGWIN__) || defined(__MINGW32__) printf("unix\n");#原创 2021-09-25 00:04:53 · 224 阅读 · 0 评论 -
c语言:20、代码宏
20、代码宏1、定义宏2、宏函数注意3、多行宏4、宏与函数的差异1、定义宏#define ARRAY_SIZE 100double data[ARRAY_SIZE];如下图,上方代码在编译器进行宏替换时会将代码中的ARRAY_SIZE替换成1002、宏函数宏函数的参数是没有任何类型的概念的,因此宏函数使用如下,代码中的MAX(3,4)会替换成宏定义的表达式#define MAX(a,b) a > b ? a : bint n1 = MAX(3,4);注意上方替换出错,原创 2021-09-24 21:22:43 · 407 阅读 · 0 评论 -
c语言:19、变长参数
c的变长参数定义在stdarg.h中#include <stdio.h>#include <stdarg.h>void HandlerVarArgs(int arg_count, ...){ //1.定义va_list 用于获取变长参数 va_list args; //2.遍历变长参数 va_start(args, arg_count); for(int i = 0; i < arg_count; i++){ //3.取出对应参数,语法格式: va_list原创 2021-09-21 12:06:46 · 107 阅读 · 0 评论 -
c语言:18、变量作用域
c语言:18、变量作用域函数作用域块作用域文件作用域函数原型作用域函数作用域void Sum(int a, int b){ //此处变量a、b、c只能在函数内使用, //出了函数的花括号就无法使用了 int c = a + b;}int main(){ Sum(1,2); printf("%d", c)}块作用域函数作用域也是一种块作用域int main(){ //下方被if块包裹的变量为块作用域 if(1){ int block_var = 3; } //varia原创 2021-09-21 10:46:14 · 63 阅读 · 0 评论 -
C语言:windows配置环境
C语言:windows配置环境环境安装1、安装MinGW编译器2、安装IDE3、配置IDE4、配置CMake5、hello world注意:环境安装1、安装MinGW编译器1、下载Msys2包管理工具一路下一步安装好,然后进入安装目录2、配置镜像只留下下方两个域名的配置3、启动命令行,安装MinGW644、更新执行下方命令,一路同意,运行下去,中途若命令行窗口被关闭了则重新打开继续执行下方命令。pacman -Su5、 安装开发工具pacman -Sy base-devel原创 2021-09-19 21:35:28 · 524 阅读 · 0 评论 -
c语言:17、位运算
c语言:17、位运算1、位2、按位与位与运算应用:迅速清零位与运算应用:保留指定位置位与运算应用:判断奇偶性3、按位或按位或用途:设定数据的指定位置4、按位异或按位异或应用:定位反转按位异或应用:数值交换5、按位取反6、左移右移左移右移1、位位表示二进制数中的一位,值是0或1,0代表false,1代表true。系统软件中常常需要处理二进制位的问题。现代框架中运算速度通常和加法相同,比乘法快。c语言提供下列6种位运算符按位与&按位或|按位异或^按位取反~左移<<右移&原创 2021-09-19 16:48:31 · 232 阅读 · 0 评论 -
c语言:16、链表
c语言:16、链表1、链表简介2、C静态链表3、动态链表1、链表简介如下图,链表数据结构中上一个元素存储了下一个元素的地址,最后一个链接下一链表的属性为NULL。head指向第一个元素。2、C静态链表#include <stdio.h>#include <string.h>struct weapon{ int price;//价格 int atk;//攻击力 char name[30];//名字 struct weapon * nex原创 2021-09-12 11:27:27 · 72 阅读 · 0 评论 -
c语言:16、共用体/联合体
c语言:16、共用体1、简介2、定义3、注意1、简介让几个不同类型的变量共享同一份内存地址。好处是可以节省一部分内存开销,缺点是同一时刻仅仅只能存储一个成员(后面的地址在赋值后会将前面的数据覆盖掉)。共用体类型的内存长度,是它所有成员中所占内存最长的成员的长度。//int占4个字节,char占1个,因此下方共用体的长度为4个字节union data{ int a; char b; int c;}2、定义#include <stdio.h>union原创 2021-09-12 00:41:47 · 347 阅读 · 0 评论 -
c语言:15、结构体
c语言:15、结构体1、结构体定义2、结构体初始化与使用3、结构体数组4、结构体指针1、结构体定义//方式1struct weapon{ char name[20]; int price;};struct weapon weapon_1;//方式2struct weapon2{ char name[20]; int price;}weapon2_1;//方式3struct{ char name[20]; int price;}struct_var;2、结构体初始化与使用原创 2021-09-12 00:05:45 · 110 阅读 · 0 评论 -
c语言:14、预处理
c语言:14、预处理1、c程序执行过程2、预处理2、宏替换2.1、宏函数2.2、宏函数注意事项(运算符优先级)2.3、宏函数的优势2.4 条件编译1、c程序执行过程c语言由源码文件编程可执行文件分为4步:预处理:由.c文件转为.i文件的过程就叫预处理编译:.i文件生成.s文件的过程叫编译汇编:.s文件生成.o文件的过程叫汇编链接:.o文件生成可执行文件的过程叫链接2、预处理下方的参数-E表示gcc只做预处理即可。下方命令将helloworld.c预处理成一个helloworld.i预处理原创 2021-09-11 20:51:41 · 470 阅读 · 0 评论 -
c语言:13、指针与内存
c语言:13、指针与内存1、计算机中数据表示方式进制2、内存管理操作系统的内存管理3、变量和指针的本质1、计算机中数据表示方式进制计算机中使用2进制、8进制、16进制表示数据;计算机用二进制处理数据,计算机计算结果显示给人看就用十进制,编程要表示二进制数据时,因为内容过长,因此使用十六进制2、内存管理计算机中不管插几块内存条都会被计算机当做一个整体来计算内存大小; 32位系统即使插再多的内存也只能使用4G内存,因为32位硬件平台上cpu地址总线只有32位,也就是操作系统寻址空间只有32位。32原创 2021-09-08 00:41:04 · 590 阅读 · 0 评论 -
c语言:12、gdb工具调试c程序
c语言:12、gdb工具调试c程序1、简介2、gdb调试例子1、创建/main.c2、编译/main.c3、创建main2.c4、编译main2.c5、开始调试6、列出当前软件项目源代码7、继续执行8、开始调试9、打印变量10、调试下一行11、进入函数内执行12、查看函数堆栈13、切换堆栈14、退出调试3、GDB调试指针1、创建/main.c2、编译/main.c3、调试main.out1、简介GDB工具是在linux环境下编程时使用的一种调试工具,功能强大,使用方便,是程序调试的利器。DB调试条件:原创 2021-09-07 20:40:53 · 699 阅读 · 1 评论 -
c语言:11、管道
c语言:11、管道1、linux管道简介2、c语言使用管道例子1、linux管道简介查看/etc/下面有没有包含ab字符的文件ls /etc/ | grep ab上方命令本质是将ls命令的输出流作为grep命令的输入流2、c语言使用管道例子/avg.cavg.c主要计算两个数字的平均值#include <stdio.h>int main(){ int sum,num; scanf("%d,%d", &sum,&num); float r原创 2021-09-07 12:57:36 · 842 阅读 · 1 评论 -
c语言:10、输入流,输出流,错误流
c语言:10、输入流,输出流,错误流1、输入输出流·简介标准输入流stdio标准输出流stdout标准错误流stderr2、输入流、输出流、错误流演示3、重定向机制linux输出流重定向linux输入流重定向linux错误流重定向终1、输入输出流·简介linux把所有程序,所有设备都当做文件来处理。linux启动一个c语言应用程序的时候,会默认打开3个文件stdin、stdout、stderr标准输入流stdio任何一个应用程序都有可能要和一个文件或者设备进行交互,如果程序需要读取设备信息,那么就原创 2021-09-07 00:54:38 · 1112 阅读 · 3 评论 -
c语言:9、main函数中的return
在c语言中main函数的return 0;对应的是执行正确例如执行下方命令linux体系系统中,使用echo $?若结果不是0,则表示上个命令执行失败了,会返回一个错误码,上图中的错误码为154原创 2021-09-05 23:29:32 · 314 阅读 · 0 评论 -
c语言:8、makeFile编写
c语言:8、makeFile编写1、make简介1、检查make版本2、Makefile编写3、使用Makefile1、make简介make工具可以将大型的开发项目分成若干个模块;可以很清晰很快捷的整理源文件;make内部也是使用gcc1、检查make版本2、Makefile编写井号开头的是注释# this is make filehello.out:max.o min.o hello.c gcc max.o min.o hello.c -o hello.outmax.原创 2021-09-05 23:09:53 · 387 阅读 · 0 评论 -
c语言:7、c语言多源码文件使用方法
c语言:7、自定义头文件1、例子1:多个源文件例子1、定义函数源文件`/hello.c`2、定义函数源文件`/max.c`3、执行编译2、提前编译好不常改动的文件1、将不常改动的文件编译好2、将main入口跟已经编译好的.o文件一起编译2、3、头文件与定义文件分离例子1、定义头文件`/include/factorial.h`2、定义源码文件`/src/factorial.c`3、在`/main.c`中调用4、cmake中添加编译`/CMakelists.txt`5、执行编译后的文件1、例子1:多个源文件例原创 2021-09-05 21:30:20 · 2138 阅读 · 0 评论 -
c语言:c语言代码风格
1、设置代码风格2、格式化代码原创 2021-09-05 13:34:12 · 130 阅读 · 0 评论 -
c语言:clion调试方法
c语言:clion调试方法1、基本区域2、GDB查看汇编指令切换指令格式3、Memory View1、基本区域2、GDB查看汇编指令使用下方命令查看当前程序的汇编指令disassemble切换指令格式设置指令格式为intel格式set disassembly-flavor intel上方设置指令格式只是临时的,可以在用户目录下创建.gdbinit使其永久生效3、Memory View...原创 2021-09-05 00:21:14 · 6571 阅读 · 4 评论 -
c语言:6、指针的简单使用与注意事项
c语言:6、指针的简单使用1、指针简单实例2、什么是指针3、如何使用指针4、NULL指针内容来源:https://www.runoob.com/cprogramming/c-pointers.html1、指针简单实例通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。每一个变量都有一个内存位置,每一个内存位置都定义了可使用&运算符访问的地址,它表示了在内存中的一个地址#include <stdio.h>int main(){ i转载 2021-09-02 10:11:23 · 328 阅读 · 0 评论 -
c语言:5、多维数组
定义格式数据类型 数组名[长度1][长度2]...[长度n]int num[3][3] = {{1,2,3}, {1,2,3}, {1,2,3}};把上面的数组看作一个3x3的矩阵,如下图:初始化方式1:数据类型 数组名[长度1][长度2]...[长度n] = {{值1,..., 值n},...{值1, ..., 值n}};方式2:数据类型 数组名[长度1][长度2]...[长度n];数组名[下标1]...[下标n] = 值;注意:采用方式1初始化数组时,必须指定列的维原创 2021-09-01 23:38:17 · 360 阅读 · 0 评论 -
c语言:4、数组与字符串
c语言:4、数组与字符串1、简介2、例子3、字符串函数strlen( stringName)strcmp( stringName1, stringName2)1、简介字符串是由多个字符组成的一段话。在c语言中,是没有办法直接定义字符串数据类型的,但是可以使用数组来定义我们需要的字符串。一般有下方两种定义形式://1、定义方式1char 字符串名字[长度] = "字符串值";//2、定义方式2char 字符串名称[长度] = {'字符1','字符2',...'字符n','\0'};注意:原创 2021-09-01 00:06:45 · 314 阅读 · 0 评论 -
c语言:3、数组
c语言:3、数组1、简介1.1、声明一个数组1.2、初始化数组2、遍历数组注意1、简介数组是一块连续的,大小固定并且里面的数据类型一致的内存空间。1.1、声明一个数组int arr[10];1.2、初始化数组//初始化方式1//数据类型 数组名称[长度n] = {元素1,元素2…元素n};int arr[3] = {1,2,3};//初始化方式2//数据类型 数组名称[] = {元素1,元素2…元素n};int arr2[] = {1,2,3,4};//初始化方式3//数据类原创 2021-08-30 00:07:17 · 149 阅读 · 0 评论 -
C语言出现warning: implicit declaration of function ‘say‘ [-Wimplicit-function-declaration]
在调用之前声明函数,不定义即可原创 2021-08-29 23:16:57 · 9258 阅读 · 0 评论 -
c语言:1、C语言变量存储类别
c语言的变量存储类别c按照变量生存周期划分:c按照存储类别分类:自动变量静态变量寄存器变量外部变量c按照变量生存周期划分:静态存储方式程序运行期间分配固定的存储空间的方式。静态存储区中存放了整个程序执行过程中都存在的变量,如全局变量。动态存储方式 程序运行期间根据需要进行动态的分配存储空间的方式。 动态存储区中存储的变量是根据程序运行的需要而建立和释放的,通 常包括函数形式参数、自动变量、函数调用时的现场包含和返回地址等c按照存储类别分类:1. 自动(auto)2. 静原创 2021-08-29 21:25:10 · 277 阅读 · 0 评论 -
c语言:2、函数
c语言:2、内部函数和外部函数内部函数外部函数内部函数不能被其他源码文件调用的函数称为内部函数,内部函数由static关键字定义,因此又称静态函数://定义内部函数static void fn(){ printf("\d", 1);}此处static是对函数作用范围限定,限定函数只能在其定义所在的文件中使用,所以不同文件有相同名称的内部函数是没有问题的。外部函数能被其他源码文件调用的函数称为外部函数,外部函数由extern关键字定义,extern也可以省略,系统会在没有指定函数的作用范原创 2021-08-29 23:13:52 · 132 阅读 · 0 评论