C语言
qq_28808697
这个作者很懒,什么都没留下…
展开
-
c语言错误笔记
c语言错误笔记1、error: expected ‘;’, ‘,’ or ‘)’ before ‘switch’原因:switch 是关键字,不能被声明成一个变量原创 2021-07-31 15:23:27 · 575 阅读 · 0 评论 -
C语言笔记 -- I/O
I/O标准库IOfopenerrno与perror函数以字节为单位的标准库IO函数标准库IOfopenfopen函数原型如下:#include <stdio.h>FILE *fopen(const char *path, const char *mode);//返回值:成功返回文件指针,出错返回NULL并设置errno其中,mode参数是一个字符串,+表示增强功能,"r+"表示不仅可以读,还可以写;"w+"表示不仅可以写,还可以读;"a+"表示不仅可以追加数据,还可以读;FIL原创 2021-04-21 23:35:30 · 300 阅读 · 0 评论 -
error: stray ‘\302’ in program/error: stray ‘\240’ in program解决方法
1、将.c文件的代码复制到本地的txt文档中保存为ANSI编码格式2、打开文件后,文件中有很多?,复制其中一个?号后,复制替换成普通的空格。如下图所示,经过替换后的文本没有无效字符了。...原创 2021-04-17 18:34:44 · 1738 阅读 · 1 评论 -
c语言笔记 -- Makefile
1、Makefile介绍把Makefile 文件和源代码放在同一个目录。make 命令会自动读取当前目录下的 Makefile 文件。Makefile 由一组规则(Rule)组成,第一条规则的目标称为缺省目标,只要缺省目标更新了就算完成任务了,其它工作都是为这个目的而做的。如果在 make 的命令行中指定一个目标(例如 clean),则更新这个目标,如果不指定目标则更新 Makefile 中第一条规则的目标(缺省目标)。每条规则的格式是:target ... : prerequisites原创 2021-04-15 23:14:11 · 595 阅读 · 0 评论 -
C语言笔记 -- 静态库 和动态库
1、静态库1)使用gcc -c 命令 将多个c源文件编译成可重定位目标文件。例如:gcc -c stack/stack.c stack/push.c stack/pop.c stack/is_empty.c2)使用ar rs 命令将多个可重定位目标文件打包成静态库。库文件名都是以lib开头的,静态库以.a作为后缀 ,表示Archive。ar命令将目标文件打包成静态库,选项r表示将后面的文件列表添加到文件包,如果文件包不存在就创建它,如果文件包中已有同名文件就替换成新的。选项s是专用于生成..原创 2021-04-14 21:43:24 · 307 阅读 · 0 评论 -
C++笔记 -- 输出运算符 << 和 输入运算符 >>
<< 运算符接收两个运算对象:左侧的运算对象必须是一个ostream对象,右侧的运算对象是要打印的值。此运算符将给定的值写到给定的ostream对象中。该运算符的计算结果是其左侧的运算对象,即要写入给定值的那个ostream对象。例如:std::cout << "Enter two numbers:" << std::endl;由于第一个<<运算符的结果是第二个<<运算符的左侧运算对象,因此可以将输出请求连接起来,上面表达式等价于(st原创 2021-04-12 09:05:00 · 4417 阅读 · 5 评论 -
c语言笔记 -- 局部变量的内存地址
对于同一个函数调用,处于不同的栈帧,则其栈帧的起始地址不同,那么函数中的局部变量的存储地址也就不同。如下代码所示,func函数在递归调用中,在不同的栈帧中变量a的地址不同。#include <stdio.h>void func() { int a = 5; int *const q = &a; printf("%d\n", q); func();}int main(int argc, char const *argv[]){原创 2021-04-10 23:46:18 · 730 阅读 · 0 评论 -
C++笔记 -- const和constexpr
const...原创 2021-04-10 19:01:17 · 358 阅读 · 2 评论 -
C语言笔记 -- 定义和声明
函数原型:声明了一个函数的名字、参数类型和个数、返回值类型。函数原型为编译器提供了有用的信息,编译器在翻译代码的过程中,只有见到函数原型(不管带不带函数体)之后才知道这个函数的名字、参数类型和返回值,这样碰到函数调用时才知道怎么生成相应的指令,所以函数原型必须出现在函数调用之前,这也是遵循“先声明后使用”的原则。函数声明:在 函数原型 后面加;号结束,而不写函数体的是函数声明函数定义:在函数原型后带函数体的就是函数定义。编译器只有见到函数定义才会生成指令,而指令在程序运行时要占存储空间。..原创 2021-04-05 14:01:52 · 260 阅读 · 0 评论 -
C++ 笔记 -- 取地址运算符和引用
当操作符&作为取地址运算符时,假设char ch = 'a';那么&ch是一个右值,而不是一个合法的左值。因为该表达式并未标识任何机器内存的特定位置,对&ch进行求值时,其结果没有地方存储,所以&ch不是一个合法的左值。在c++中,将声明符写成&d的形式来定义引用类型,其中d是声明的变量名。引用和它的初始值对象绑定在一起,引用是其绑定对象的别名。int i = 1024;int &refVal = i;refVal = 2;原创 2021-03-31 08:16:05 · 817 阅读 · 0 评论 -
linux 下离线安装软件
可以在相同版本的能够联网的系统上编译并静态链接生成该软件的可执行文件,然后拷贝到离线的系统上。原创 2021-03-26 13:14:31 · 198 阅读 · 0 评论 -
C语言笔记 -- 处理僵尸进程
调用fork函数创建的子进程的终止方式:1)调用exit函数并使用exit函数传递参数 ;2)main函数中调用return函数并返回值。fork函数创建的子进程虽然被终止,但是操作系统不会销毁子进程,这样的进程就是僵尸进程。向exit函数传递的参数值和main函数中return语句的返回值都会传递给操作系统,只有这些值被传递给创建该子进程的父进程,这些终止的子进程才会被销毁。如果父进程没有主动要求(通过函数调用)获得子进程的结束状态值,操作系统会一直保存,并让子进程长期处于僵尸进程的状态。原创 2021-03-20 21:08:12 · 543 阅读 · 0 评论 -
C语言笔记 -- 优先级
1、赋值运算符的优先级小于 比较运算符的优先级如下代码所示, 当函数func返回值大于0时,b = 1,条件成立,运行打印语句;当函数func返回值小于等于0时,b = 0,条件不成立,不会运行打印语句。#include <stdio.h>int func() { int a = 4; return a;}int main(int argc, char const *argv[]){ int b; if (b = func() > 0)原创 2021-03-19 15:18:04 · 1518 阅读 · 0 评论 -
C语言笔记-- 常用函数使用
1、perror函数void perror(const char *s);perror函数会根据errno打印发生错误的原因,但是不会自动退出程序。退出程序需要手动调用exit()函数2、fputs函数int fputs(const char *s, FILE *stream);fputs函数是向文件输出字符串,不能格式化输出字符串,格式化输出字符串用printf家族的函数3、read函数ssize_t read(int fd, void *buf, size_t count..原创 2021-03-17 23:02:46 · 98 阅读 · 0 评论 -
C语言笔记 -- 链接
1、将C源文件编译成可执行文件的过程:1)编译器驱动程序(compiler driver)运行预处理器,将C源文件翻译成一个中间文件 .i2)编译器驱动程序(compiler driver)运行编译器,将.i 文件翻译成一个汇编语言文件.s3)编译器驱动程序(compiler driver)运行汇编器,将.s文件翻译成一个可重定位目标文件.o4)编译器驱动程序(compiler driver)运行连接器,将多个.o文件以及一些必要的系统目标文件组合成一个可执行目标文件。2、...原创 2021-03-03 22:39:27 · 104 阅读 · 2 评论 -
C语言笔记 -- typedef 与 函数指针
typedef可以用来定义函数类型,如下所示定义函数类型F:typedef int F(void);这种类型的函数不带参数,返回值是 int。如下声明定义了一个函数指针:int (*fp)(void);该指针指向的函数不带参数,返回值为int 。 所以 该声明等同于F *fp;...原创 2021-03-02 17:20:01 · 470 阅读 · 0 评论 -
C语言笔记 -- 系统调用
用户进程可以通过系统调用向操作系统发起请求,希望操作系统替自己去完成某项操作,但是操作系统怎么完成取决于自己而且不受进程控制,进程也不知道操作系统是如何完成请求的,这是现代操作系统实现进程、多任务、虚拟内存等重要功能一个基本前提。CPU的工作模式有 用户模式(User mode) 和 内核模式(Kernel mode)。当CPU执行用户程序的指令时,操作系统把CPU的工作模式设置为用户模式,CPU不能执行所有的机器指令(比如I/O操作类指令,这类指令被称为特权指令),只能访问部分的内存空间。在内核模式下转载 2021-01-29 19:02:15 · 1270 阅读 · 0 评论 -
C语言笔记 -- 类型转换
从较小类型转换成较大类型称为升级,从较大类型转换成较小类型称为降级。类型升级通常不会有什么问题,因为类型升级是用大的空间来存储较小类型的数据,会造成一些空间上的浪费。而类型降级会导致真正的麻烦,因为较低类型可能放不下整个数字。...原创 2021-01-28 10:39:37 · 140 阅读 · 0 评论 -
C语言笔记 -- 函数参数为指针变量时的参数传递
当函数的参数是一个指针时,传递给函数是实参指针的一个拷贝,所以改变形参指针并不会改变实参指针。如下例所示,函数strlen会修改形参指针str,但是main函数调用函数strlen返回后,实参指针str仍然指向字符串"nowisthetime"的首地址。此外,strlen函数的形参const char *str是一个指向常量的指针,而实参char *str 并不是一个常量对象。也就是说一个指向常量的指针只是无法通过该指针修改所指向的对象的值,该指针可以指向一个非常量对象,而且那个对象的值可以通过...原创 2021-01-14 14:40:34 · 2599 阅读 · 0 评论 -
C语言笔记 -- 指针表达式
后缀++操作符的优先级高于*操作符, 这两个操作符的结合性是从右向左的。1、*cp++ 表达式的计算分3个步骤,(1)++操作符产生cp的一份拷贝;(2)++操作符将cp的值加1,使cp指向下一个内存单元;(3)最后,在cp的拷贝上执行间接访问操作。所以该表达式返回的结果仍然是cp指向的内容,并让cp指向下一个内存单元。2、(*cp)++ 表达式的计算:(1)加上括号,使它先执行间接访问操作; (2)++操作符先产生*cp的一份拷贝,然后++操作符将*cp加1;(3)最后,返回*cp的拷贝。原创 2021-01-13 15:06:58 · 210 阅读 · 0 评论 -
C语言 IO 笔记
Linux系统 使用Ctrl + D 输入 结束符EOF原创 2021-01-11 14:40:24 · 147 阅读 · 0 评论 -
Java、C、C++ 数组默认初始化
在java中, 使用new运算符创建数组,能够默认初始化该数组。整形数组 默认初始值为0;布尔数组默认初始值为 false;String 数组以及 对象数组初始值为 null.在C、C++中,声明一个局部数组,但是此时该数组中元素的值并未定义。int sum[100]={0}; // 该语句是为数组第0个元素赋值为0,当数组部分初始化时,其他部分会被初始化为0,所以该语句会把整个数组都初始化为0;int sum[100]={1}; // 该语句为数组第0个元素赋值为1, 其他元素初.原创 2020-12-16 11:03:42 · 566 阅读 · 0 评论 -
C语言 结构体 序列化
# include <stdio.h>int main(){ struct point { int x; int y; } p; p.x = 50; p.y = 128; // p_char 指向结构体变量p, 并将p识别成 无符号char类型 unsigned char *p_char = (unsigned char *) &p; printf("%d\n", sizeof(.原创 2020-12-01 12:13:02 · 1793 阅读 · 0 评论