编程语言(C/C++)
文章平均质量分 59
C语言程序设计
事后不诸葛
人生没有彩排,每一天都是现场直播
展开
-
C语言强制类型转换
强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果想存储一个 long 类型的值到一个简单的整型中,需要把 long 类型强制转换为 int 类型。可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型,如下所示:(type_name) expression请看下面的实例,使用强制类型转换运算符把一个整数变量除以另一个整数变量,得到一个浮点数:#include <stdio.h> int main(){ int sum = 17, count =原创 2022-04-16 16:06:59 · 11518 阅读 · 0 评论 -
C语言可变参数函数
有时,可能会碰到这样的情况,希望函数带有可变数量的参数,而不是预定义数量的参数。下面的实例演示了这种函数的定义。int func(int, ... ) { . . .} int main(){ func(2, 2, 3); func(3, 2, 3, 4);}请注意,函数func()最后一个参数写成省略号,即三个点号(...),省略号之前的那个参数是int,代表了要传递的可变参数的总数。为了使用这个功能,需要使用stdarg.h头文件,该文件提供...原创 2022-04-16 17:24:31 · 488 阅读 · 0 评论 -
C语言递归用法
目录数的阶乘斐波那契数列递归指的是在函数的定义中使用函数自身的方法。语法格式如下:void recursion(){ statements; ... ... ... recursion(); /* 函数调用自身 */ ... ... ...} int main(){ recursion();}C 语言支持递归,即一个函数可以调用其自身。但在使用递归时,程序员需要注意定义一个从函数退出的条件,否则会进入死循环。递归函数在解决许多数学问题上原创 2022-04-16 16:48:07 · 976 阅读 · 0 评论 -
C语言错误处理
C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许访问底层数据。在发生错误时,大多数的 C 或 UNIX 函数调用返回 1 或 NULL,同时会设置一个错误代码errno,该错误代码是全局变量,表示在函数调用期间发生了错误。可以在 errno.h 头文件中找到各种各样的错误代码。所以,C 程序员可以通过检查返回值,然后根据返回值决定采取哪种适当的动作。开发人员应该在程序初始化时,把 errno 设置为 0,这是一种良好的编程习惯。0 值表示程序中没有错误。errno.原创 2022-04-16 16:28:44 · 460 阅读 · 0 评论 -
C语言预处理器
目录预定义宏预处理器运算符参数化的宏程序编译过程为:预处理,编译,汇编,链接预处理器是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。把 C 语言预处理器(C Preprocessor)简写为 CPP。所有的预处理器命令都是以井号(#)开头。它必须是第一个非空字符,为了增强可读性,预处理器指令应从第一列开始。下面列出了所有重要的预处理器指令:指令 描述 #define 定义宏 #include 包含一个源代码文件 #undef原创 2022-04-11 15:12:52 · 274 阅读 · 0 评论 -
C语言的文件读写函数
目录打开文件关闭文件写入文件读取文件二进制 I/O 函数打开文件fopen( )函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型FILE的一个对象,类型FILE包含了所有用来控制流的必要的信息。下面是这个函数调用的原型:FILE *fopen( const char * filename, const char * mode );其中,filename是文件名,访问模式mode值可以是下列值中的一个:模式 描述 r ...原创 2022-04-01 20:20:24 · 4076 阅读 · 1 评论 -
C语言输入输出函数
目录标准文件getchar() & putchar() 函数gets() & puts() 函数scanf() 和 printf() 函数标准文件C 语言把所有的设备都当作文件。所以设备(比如显示器)被处理的方式与文件相同。以下三个文件会在程序执行时自动打开,以便访问键盘和屏幕。标准文件 文件指针 设备 标准输入 stdin 键盘 标准输出 stdout 屏幕 标准错误 stderr 您的屏幕 get原创 2022-03-31 21:11:12 · 1452 阅读 · 0 评论 -
C语言 typedef 关键字
C 语言提供了 typedef 关键字,可以使用它来为类型取一个新的名字。下面的实例为单字节数字定义了一个术语 BYTE:typedef unsigned char BYTE;在这个类型定义之后,标识符 BYTE 可作为类型 unsigned char 的缩写,例如:BYTE b1, b2;按照惯例,定义时会大写字母,以便提醒用户类型名称是一个象征性的缩写,但也可以使用小写字母,如下:typedef unsigned char byte;也可以使用typedef来为用户自..原创 2022-03-29 11:08:39 · 1256 阅读 · 0 评论 -
C语言位域
目录位域声明位域的定义和位域变量的说明位域声明有些信息在存储时,并不需要占用一个完整的字节(一个字节8位),而只需占几个或一个二进制位。例如在存放一个开关量时,只有 0 和 1 两种状态,用 1 位二进位即可。为了节省存储空间,并使处理简便,C 语言又提供了一种数据结构,称为"位域"或"位段"。所谓"位域"是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。典型的实例:原创 2022-03-25 17:41:32 · 253 阅读 · 0 评论 -
C语言共用体
共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。定义共用体为了定义共用体,您必须使用union语句,方式与定义结构类似。union 语句定义了一个新的数据类型,带有多个成员。union 语句的格式如下:union [union tag]{ member definition; member definition; ... memb..原创 2022-03-24 21:19:27 · 260 阅读 · 0 评论 -
C语言结构体
目录结构体定义结构体变量的初始化访问结构成员结构体作为函数参数指向结构的指针结构体定义定义结构,必须使用 struct 语句。struct tag { member-list member-list member-list ...} variable-list ;tag是结构体标签。 member-list是标准的变量定义,比如 int i; 或者 float f,或者其他有效的变量定义。 variable-list...原创 2022-03-24 20:48:20 · 119 阅读 · 0 评论 -
C语言字符串处理函数
C语言中头文件<string.h>,C++中头文件<string>序号 函数 & 目的 1 strcpy(s1, s2); 复制字符串 s2 到字符串 s1。 2 strncpy(s1, s2, n); 复制字符串 s2 前 n 个字符到字符串 s1。 3 strcat(s1, s2); 连接字符串 s2 到字符串 s1 的末尾。 4 strncat(s1, s2, n); 连接字符串 s2 前 n 个原创 2022-03-21 14:18:31 · 779 阅读 · 0 评论 -
C语言字符串长度
在 C 语言中,字符串实际上是使用空字符 \0 结尾的一维字符数组。因此,\0 是用于标记字符串的结束。空字符(Null character)又称结束符,缩写 NUL,是一个数值为 0 的控制字符,\0 是转义字符,意思是告诉编译器,这不是字符 0,而是空字符。下面的声明和初始化创建了一个 RUNOOB 字符串。由于在数组的末尾存储了空字符 \0,所以字符数组的大小比单词 RUNOOB 的字符数多一个。char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\原创 2022-03-10 21:17:21 · 2591 阅读 · 0 评论 -
C语言函数指针与回调函数
目录函数指针回调函数函数指针函数指针是指向函数的指针变量。通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。函数指针可以像一般函数一样,用于调用函数、传递参数。函数指针变量的声明:typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针类型实例以下实例声明了函数指针变量 p,指向函数 max:#include <stdio.h> int max(int x, in原创 2022-03-10 20:44:05 · 118 阅读 · 0 评论 -
C语言传递指针给函数
C 语言允许传递指针给函数,只需要简单地声明函数参数为指针类型即可。下面的实例中,我们传递一个无符号的 long 型指针给函数,并在函数内改变这个值:实例#include <stdio.h>#include <time.h> void getSeconds(unsigned long *par);int main (){ unsigned long sec; getSeconds( &sec ); /* 输出实际值 */原创 2022-03-04 11:02:41 · 3326 阅读 · 0 评论 -
C语言指向指针的指针
简介指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。一个指向指针的指针变量必须如下声明,即在变量名前放置两个星号。例如,下面声明了一个指向 int 类型指针的指针:int **var;当一个目标值被一个指针间接指向到另一个指针时,访问这个值需要使用两个星号运算符,如下面实例所示:实例#include <stdio.h>原创 2022-03-02 22:25:31 · 741 阅读 · 1 评论 -
C语言指针的算术运算
C 指针是一个用数值表示的地址。因此,您可以对指针执行算术运算。可以对指针进行四种算术运算:++、--、+、-。假设ptr是一个指向地址 1000 的整型指针,是一个 32 位的整数,让我们对该指针执行下列的算术运算:ptr++在执行完上述的运算之后,ptr将指向位置 1004,因为 ptr 每增加一次,它都将指向下一个整数位置,即当前位置往后移 4 字节。这个运算会在不影响内存位置中实际值的情况下,移动指针到下一个内存位置。如果ptr指向一个地址为 1000 的字符,上面的运算会导...原创 2022-03-01 16:09:12 · 774 阅读 · 0 评论 -
C语言指针数组
目录引言简介引言讲解指针数组的概念之前,来看一个实例,它用到了一个由 3 个整数组成的数组:#include <stdio.h> const int MAX = 3; int main (){ int var[] = {10, 100, 200}; int i; for (i = 0; i < MAX; i++) { printf("Value of var[%d] = %d\n", i, var[i] );原创 2022-02-28 21:34:39 · 674 阅读 · 0 评论 -
C语言指针简介及NULL指针
目录简介什么是指针?如何使用指针?NULL 指针简介通过指针,可以简化一些编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。每一个变量都有一个内存位置,每一个内存位置都定义了可使用 & 运算符访问的地址,它表示了在内存中的一个地址。请看下面的实例,它将输出定义的变量地址:实例#include <stdio.h> int main (){ int var_runoob = 10; int *p; .原创 2022-02-26 20:48:53 · 326 阅读 · 0 评论 -
C语言指向数组的指针用法
简介数组名是一个指向数组中第一个元素的常量指针。因此,在下面的声明中:double balance[50];balance是一个指向 &balance[0] 的指针,即数组 balance 的第一个元素的地址。因此,下面的程序片段把p赋值为balance的第一个元素的地址:double *p;double balance[10];p = balance;使用数组名作为常量指针是合法的,反之亦然。因此,*(balance + 4) 是一种访问 balance[4...原创 2022-02-22 15:28:28 · 343 阅读 · 0 评论 -
C语言从函数返回数组
C 语言不允许返回一个完整的数组作为函数的参数。但是,可以通过指定不带索引的数组名来返回一个指向数组的指针。如果想要从函数返回一个一维数组,必须声明一个返回指针的函数,如下:int * myFunction(){...}另外,C 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。现在,让我们来看下面的函数,它会生成 10 个随机数,并使用数组来返回它们,具体如下:实例#include <stdio.h>#include <stdl原创 2022-02-22 10:14:48 · 11902 阅读 · 0 评论 -
C语言传递数组给函数方式
目录方式 1方式 2方式 3实例如果想要在函数中传递一个一维数组作为参数,您必须以下面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,因为每种方式都会告诉编译器将要接收一个整型指针。同样地,您也可以传递一个多维数组作为形式参数。方式 1形式参数是一个指针:void myFunction(int *param){...}方式 2形式参数是一个已定义大小的数组:void myFunction(int param[10]){...}原创 2022-02-21 20:38:50 · 11394 阅读 · 0 评论 -
C语言多维数组的初始化
C 语言支持多维数组。多维数组声明的一般形式如下:type name[size1][size2]...[sizeN];例如,下面的声明创建了一个三维 5 . 10 . 4 整型数组:int threedim[5][10][4];二维数组下面是一个二维数组,包含 3 行和 4 列:int x[3][4];因此,数组中的每个元素是使用形式为 a[ i , j ] 的元素名称来标识的,其中 a 是数组名称,i 和 j 是唯一标识 a 中每个元素的下标。初始化二维数组多原创 2022-02-21 20:25:03 · 4195 阅读 · 0 评论 -
C语言作用域规则
简介任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量:在函数或块内部的局部变量 在所有函数外部的全局变量 在形式参数的函数参数定义中两点注意在程序中,局部变量和全局变量的名称可以相同,但是在函数内,如果两个名字相同,会使用局部变量值,全局变量不会被使用。 函数的参数,形式参数,被当作该函数内的局部变量,如果与全局变量同名它们会优先使用。实例#include <stdio.h> /*原创 2022-02-18 16:48:20 · 407 阅读 · 0 评论 -
C语言标准库-<stdbool.h>-bool型头文件
用法在最新的 C 语言标准(C99)解决了布尔类型的问题。C99 提供了 _Bool 型,所以布尔类型可以声明为 _Bool flag。_Bool 依然仍是整数类型,但与一般整型不同的是,_Bool 变量只能赋值为 0 或 1,非 0 的值都会被存储为 1。C99还提供了一个头文件 <stdbool.h> 定义了 bool 代表 _Bool,true 代表 1,false 代表 0。只要导入 stdbool.h ,就能非常方便的操作布尔类型了。//导入 stdbool.h 来使用布尔类原创 2022-02-16 16:09:41 · 17376 阅读 · 1 评论 -
C语言变量的声明与定义区别
目录定义声明区别定义变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示:type variable_list;在这里,type 必须是一个有效的 C 数据类型,可以是 char、w_char、int、float、double 或任何用户自定义的对象,variable_list 可以由一个或多个标识符名称组成,多个标识符之间用逗号分隔。变量可以在声明的时候被初始化(指定一个初始值)。初始原创 2022-02-16 14:48:47 · 638 阅读 · 0 评论 -
C语言循环语句
循环类型C 语言提供了以下几种循环类型。循环类型 描述 while 循环 当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件。 for 循环 多次执行一个语句序列,简化管理循环变量的代码。 do...while 循环 除了它是在循环主体结尾测试条件外,其他与 while 语句类似。 嵌套循环 您可以在 while、for 或 do..while 循环内使用一个或多个循环。 for 循环编译器报错有些编译器运行上述语句时会报错,如下原创 2022-02-13 19:00:00 · 750 阅读 · 0 评论 -
C语言判断及三元运算和switch语句用法
目录? : 运算符(三元运算符)switch语句嵌套switch语句? : 运算符(三元运算符)一般形式如下:Exp1 ? Exp2 : Exp3;其中,Exp1、Exp2 和 Exp3 是表达式。请注意,冒号的使用和位置。? 表达式的值是由 Exp1 决定的。如果 Exp1 为真,则计算 Exp2 的值,结果即为整个表达式的值。如果 Exp1 为假,则计算 Exp3 的值,结果即为整个表达式的值。switch语句一个switch语句允许测试一个变量等...原创 2022-02-13 16:47:10 · 530 阅读 · 0 评论 -
C语言运算符
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 语言内置了丰富的运算符,并提供了以下类型的运算符:算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他运算符。算术运算符下表显示了 C 语言支持的所有算术运算符。假设变量A的值为 10,变量B的值为 20,则:运算符 描述 实例 + 把两个操作数相加 A + B 将得到 30 - ...原创 2022-02-11 13:56:45 · 110 阅读 · 0 评论 -
C语言存储类
目录auto 存储类register 存储类static 存储类extern 存储类存储类定义 C 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C 程序中可用的存储类:auto register static externauto 存储类auto 存储类是所有局部变量默认的存储类。{ int mount; auto int month;}上面的实例定义了两个带有相同存储类的变量,auto 只原创 2022-02-10 10:14:57 · 129 阅读 · 0 评论 -
C语言字符常量与常量定义
目录字符常量定义常量#define 预处理器const 关键字字符常量字符常量是括在单引号中,例如,'x' 可以存储在char类型的简单变量中。字符常量可以是一个普通的字符(例如 'x')、一个转义序列(例如 '\t'),或一个通用的字符(例如 '\u02C0')。在 C 中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被用来表示如换行符(\n)或制表符(\t)等。下表列出了一些这样的转义序列码:转义序列 含义 \\ \ 字符 \..原创 2022-02-09 17:19:28 · 6784 阅读 · 0 评论 -
C语言数据类型
在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。C 中的类型可分为以下几种:序号 类型与描述 1 基本类型: 它们是算术类型,包括两种类型:整数类型和浮点类型。 2 枚举类型: 它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。 3 void 类型: 类型说明符void表明没有可用的值。 4 派生类型: 它们包括:指针..原创 2022-02-01 20:00:08 · 120 阅读 · 0 评论 -
C语言基本语法
目录编译 & 执行 C 程序标识符关键字C 中的空格编译 & 执行 C 程序#include <stdio.h> int main(){ /* 我的第一个 C 程序 */ printf("Hello, World! \n"); return 0;}让我们看看如何把源代码保存在一个文件中,以及如何编译并运行它。下面是简单的步骤:打开一个文本编辑器,添加上述代码。 保存文件为hello.c。 打开命令提...原创 2022-01-29 18:24:20 · 127 阅读 · 0 评论 -
C语言环境设置
目录本地环境设置文本编辑器C 编译器UNIX/Linux 上的安装Mac OS 上的安装Windows 上的安装本地环境设置如果您想要设置 C 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C 编译器。文本编辑器这将用于输入您的程序。文本编辑器包括 Windows Notepad、OS Edit command、Brief、Epsilon、EMACS 和 vim/vi。文本编辑器的名称和版本在不同的操作系统上可能会有所不同。例如,Notepad 通原创 2022-01-28 15:21:01 · 97 阅读 · 0 评论 -
C和C++的区别与联系
C和C++的联系#if defined(__cplusplus) || defined(c_plusplus)宏命令的用法#if defined(__cplusplus) || defined(c_plusplus)宏命令的用法示例:代码开头:#if defined(__cplusplus) || defined(c_plusplus)extern "C"{#endif代码结尾:#if defined(__cplusplus) || defined(c_plusplus)}#endi原创 2021-12-22 19:42:17 · 995 阅读 · 0 评论 -
编程语言(c/c++)学习资源
书:《c语言程序设计》->《c++ primer》-> C++ efftive 系列 -> 《C++ STL 源码剖析》->《深入理解C++对象模型》原创 2021-12-12 16:28:59 · 570 阅读 · 0 评论