C语言基础知识
Patrick-Star
我用双手改变世界!
展开
-
计算机网络(TCP IP)
1 建立TCP服务器的各个系统调用 建立TCP服务器连接的过程中主要通过以下系统调用序列来获取某些函数,这些系统调用主要包括:socket(),bind(),listen(),accept(),send()和recv(),以及close()。 建立TCP客户端时函数调用主要为:socket(),connect(),read()和recv(),以及close()。 2 继上一题...转载 2019-04-15 15:10:22 · 602 阅读 · 0 评论 -
认识UART接口
这个文章转载自点击打开链接。----------------------------------------------------------------------------------------------------------------------------简单的讲:(UART与COM) 嵌入式里面说的串口,一般是指UART口, 但是我们经常搞不清楚它和COM口的区...转载 2018-07-13 17:46:59 · 220 阅读 · 1 评论 -
4.5章:两栈共享空间
头文件部分,已经栈的结构体#define MAX_SIZE 20#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int SElemType;typedef int Status;#define MAXSIZE 100typedef struct{ SElemType data[MAXSIZE];...原创 2018-04-19 17:38:50 · 192 阅读 · 0 评论 -
4.4章:栈的顺序存储结果及实现
头文件部分#define MAX_SIZE 20#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int SElemType;typedef int Status;#define MAXSIZE 100typedef struct{ SElemType data[MAXSIZE]; int t...原创 2018-04-19 17:36:06 · 205 阅读 · 0 评论 -
学习C++之前要学C语言吗?
C++ 读作“C加加”,是“C Plus Plus”的简称。顾名思义,C++是在C语言的基础上增加新特性,玩出了新花样,所以叫“C Plus Plus”,就像 iPhone 6S 和 iPhone 6、Win10 和 Win7 的关系。从语法上看,C语言是C++的一部分,C语言代码几乎不用修改就能够以C++的方式编译,这给很多初学者带来了不小的困惑,学习C++之前到底要不要先学习C语言呢?我对这个...转载 2018-04-19 16:28:51 · 7689 阅读 · 4 评论 -
第三章:线性表:单链表
头文件部分using namespace std;#define MAX_SIZE 20#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef struct Node{ ElemType data; struct Node *next;}Node;typedef struct Node *LinkLi...原创 2018-04-19 15:18:17 · 204 阅读 · 0 评论 -
“error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载他人加上自己独特的理解,希望能对你有所帮助)
上面部分转载自他人,若以看过,可以直接跳到下面。------------------------------------------------------------------------------------------------------------------------------问题描述如下:有 三个源文件,A.h、B.cpp、C.cpp。A.h是头文件,其中声明了三个变量a1...转载 2018-04-12 21:20:28 · 475 阅读 · 0 评论 -
查找第二种:二分查找(折半查找)丶插值查找和斐波那契查找
//二分查找(折半查找)int Bindary_Search(int *a, int n, int key) //第一版本{ int low, high, mid; low = 1; high = n; while (low <= high) { mid = low + (high - low) / 2; //折半 最重要! if (a[mid] > key)...原创 2018-03-29 16:15:02 · 492 阅读 · 0 评论 -
查找第一种:顺序查找
//顺序表查找//顺序查找, a为数组, n为数组长度, key为关键字int Sequential_Search(int *a, int n, int key){ int i; for (i = 1; i <= n; i++) //注意i从1开始,原因见下面 { if (a[i] == key) { return i; } } return 0;}int Sequentia...原创 2018-03-29 16:00:23 · 195 阅读 · 0 评论 -
linux编辑文本(vim)时跳转到最后一行和第一行及相关指令
vi操作1.跳到文本的最后一行:按“G”,即“shift+g”2.跳到最后一行的最后一个字符 : 先重复1的操作即按“G”,之后按“$”键,即“shift+4”。3.跳到第一行的第一个字符:先按两次“g”,4.跳转到当前行的第一个字符:在当前行按“0”。5.vi加密。进入vi,输入":" + "X" 之后就提示你输入两次密码。6.文件重新载入 :e!7.单行复制 将...转载 2018-07-31 20:03:50 · 9080 阅读 · 0 评论 -
Mysql命令大全(完整版)
本文章转载自https://www.jb51.net/article/74564.htm一、连接数据库格式:mysql -h主机地址 -u用户名 -p用户密码1.1.连接到本机上的MYSQL。首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码...转载 2018-08-26 18:27:26 · 9576 阅读 · 1 评论 -
公司实习时,GIT使用小总结
问题:当repo sync时,出现auto/ prior sync failed; rebase still in progress 分析auto目录下是否有修改,有则复原/提交 查看log日志,看看是否存在系统自动帮你提交的,因为如果你本地提交,那么系统比对,则发现不匹配,则无法repo sync, 此时git reset --hard HEAD^ 这个命令后面^的数量为撤回的数量,...原创 2019-03-12 16:13:25 · 479 阅读 · 0 评论 -
Linux中常见命令
楼主在这这几天找工作过程中因为一些基础指令不了解,都被面试官怼了一下,这不特地回来看了一下,不管怎么说也是学过嵌入式的人,怎么可以一些基础的指令不了解呢。其实面试官问的都是一些很基础的指令,不会说问特别偏的指令,毕竟我们有man嘛。下面是转载自JackPai的一篇文章,点这个可以进入原链接。1、cd命令这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切...转载 2019-03-12 16:04:33 · 217 阅读 · 0 评论 -
内存结构 堆 栈 全局区 常量区 代码区
1. 一个由C/C++编译的程序占用的内存分为以下几个部分:1.1 栈区(stack) 由编译器自动分配和释放,存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈。1.2 堆区(heap) 一般由程序员分配和释放,若程序员没有释放,则可能在程序结束时由操作系统(OS)回收。注意它与数据结构中的堆是两回事,其分配方式倒是类似于链表。1.3...转载 2018-09-11 09:07:09 · 876 阅读 · 1 评论 -
程序是如何变成可执行的机器代码的?
程序编译的过程中就是将用户的文本形式的源代码(c/c++)转化成计算机可以直接执行的机器代码的过程。主要经过这么几个过程:0、预编译,又称为预处理 , 是做些代码文本的替换工作1、编译,由编译器将c源代码(.cpp)转变成汇编代码(.s)2、汇编,由汇编器将汇编代码(.s)转变成目标代码(.o)3、链接,由链接器将代码在执行过程用到的其他目标代码和库文件链接成为一个可执行程序也就是...原创 2018-09-06 09:10:43 · 4945 阅读 · 0 评论 -
C/C++重定义该如何解决
1.#pragma once用来防止某个头文件被多次include;#ifndef,#define,#endif用来防止某个宏被多次定义。2.#pragma once是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以,也就是说移植性差,不过现在基本上已经是每个编译器都有这个定义了;#ifndef,#define,#endif这个是C++语言相关,这是C++语言中的...原创 2018-01-28 19:15:00 · 2482 阅读 · 0 评论 -
这样的TCP/IP协议,你看懂了吗?
本文章转载自https://blog.csdn.net/yulyu/article/details/69062288精通 TCP/IP,熟练使用 Socket 进行网路编程。看到这句话,有没有感到很熟悉呀?相信很多人在投递简历的时候都看到过这条要求,很多人会觉得我们在实际开发中一般用不到这些知识,所以对这些东西不屑一顾.但是笔者认为想要做出更好的 APP,那么对这些基础知识必须要有一定的...转载 2018-08-24 13:34:17 · 30571 阅读 · 0 评论 -
C语言运算符优先级表
文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。单目运算符 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 ...转载 2018-08-23 15:08:53 · 5574 阅读 · 0 评论 -
如何判断两个double类型的数是否相等?
首先,浮点数在计算机中并不能精确的表示,所以在判断两个double类型的数时需要其他的手段,而不是直接double temp1 = 0.0, temp2 = 0.0;if (temp1 == temp2){ ....}最好的是选择一个合适的精度,来进行判断,精度自己决定。#define length 0.00001int main(){ double a = 0...原创 2018-08-26 19:30:24 · 11046 阅读 · 0 评论 -
排序第六章:归并排序第二版本(迭代调用)
#define MAX_SIZE 10typedef struct{ int m[MAX_SIZE ]; int length;} SqList;//用排序,铁定跑不了这个swap函数,最好自己写一个void swap(SqList *q, int i, int j);void swap(SqList *q, int i, int j){ int temp = q->m[i]; q->...原创 2018-03-27 16:46:15 · 214 阅读 · 0 评论 -
排序第七章:快速排序标准版
#define MAX_SIZE 10typedef struct{ int m[MAX_SIZE ]; int length;} SqList;//用排序,铁定跑不了这个swap函数,最好自己写一个void swap(SqList *q, int i, int j);void swap(SqList *q, int i, int j){ int temp = q->m[i]; q->...原创 2018-03-27 16:02:10 · 312 阅读 · 0 评论 -
C++小知识1
1. 对象是内存的一块区域,具有某种类型。变量是命名了的对象。2. &运算符,取地址运算符3. *运算符, 解引用运算符。解引用一个指针将返回该指针所指的对象,为解引用的结果赋值也就是为指针所指的对象赋值。4. 域解析符(::):编译器应该从操作符左侧名字std所示的作用域中寻找右侧的那个名字cin 例:std::cin 要使用命名空间std...原创 2018-02-27 21:59:46 · 197 阅读 · 0 评论 -
C++知识点6
一丶构造函数知识点1:构造函数—特殊的成员函数,用来控制对象的初始化过程。无返回类型,可重载,不能被声明为const.知识点2:若无,则有默认的构造函数,是编译器自己隐式的定义的。又称合成的默认构造函数。知识点3:某些类是不能使用默认的构造函数的,以下三个原因:1:在未声明任何构造函数的前提下,类内对象的初始化将不受控制2:合成的默认构造函数可能会造成不必要的错误,如若没有类内初始值来初始化成员,...原创 2018-03-06 21:12:32 · 211 阅读 · 0 评论 -
QT项目的小总结用法
这次在寒假里做这个银行管理系统,收益颇丰,这次这个让我对QT这个软件熟悉了许多,也可以自己试着去编写一些程序对我今后的学习很有帮助。这次做项目时候遇到的一些问题,虽然都解决了,但有些问题需要我们去铭记住1. 接收客户端发来的信息对他进行解码 2. 如何发送数据给客户端 3. 如何选择发给哪个客户端 这个sockclient就是需要发的客户端的编号了。 4. 如何读取本机时间 5. 数据类型之...原创 2018-02-26 17:34:54 · 4368 阅读 · 1 评论 -
类型别名和auto的注意点
知识点一:使用类型别名:C++中可以定义一个类型的别名,有两种方式1:使用typedeftypedef double wages; //wages就成为了double的别名 typedef wages base ,*p; //base 成了double的别名(同义词),p成了double *的同义词(double类型的指针) 2:使用别名名称using SI = Sales_item; ...原创 2018-02-26 17:31:01 · 172 阅读 · 0 评论 -
在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”
答:首先,extern是C/C++语言中表明函数和全局变量作用范围的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。extern "C"是连接申明(linkage declaration),被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。作为一种面向对象的语原创 2018-02-04 19:21:46 · 581 阅读 · 0 评论 -
C语言程序编译的几个阶段
程序编译的过程中就是将用户的文本形式的源代码(c/c++)转化成计算机可以直接执行的机器代码的过程。主要经过这么几个过程:1、编译,由编译器将c源代码(.cpp)转变成汇编代码(.s)2、汇编,由汇编器将汇编代码(.s)转变成目标代码(.o)3、链接,由链接器将代码在执行过程用到的其他目标代码和库文件链接成为一个可执行程序也就是目标程序。1、编译编译原创 2018-02-04 19:19:04 · 2497 阅读 · 0 评论 -
C++如何保留两位有效数字!!!!
#include #include //注意这个头文件using namespace std;int main(){double t = 2.1356899889898;cout.precision(2); //第一种方法cout.setf(ios::fixed);cout cout cout system("pause原创 2018-01-30 21:12:12 · 17241 阅读 · 2 评论 -
const和#define的区别
const与#define相比,有何优点①define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误。 ②const常量可以进行调试的,define是不能进行调试的,因为在预编译阶段就已经替换掉了#define RADIUS 100const float RADIUS = 100(1) 编译器处理方式不同原创 2018-01-30 21:11:17 · 135 阅读 · 0 评论 -
typedef 和#define的简单区别
typedef char * String_t;#define String_d char *1.typedef char *String_t 定义了一个新的类型别名,有类型检查2.#define String_d char * 只是做了个简单的替换,无类型检查3.前者在编译的时候处理,后者在预编译(预处理)的时候处理4.同时定义多个变量的时候有区别,主要区别在于这种使用方式String_t a,...原创 2018-02-20 12:51:12 · 214 阅读 · 0 评论 -
C++小知识2
继C++小知识1五.string类中的size()函数和length()函数的区别?(1)size 语法: size_type size();size()函数返回字符串中现在拥有的字符数。(2)长度(length)语法: size_type length();length()函数返回字符串的长度. 这个数字应该和size()返回的数字相同.vector有size()函数得到大小,strin...原创 2018-02-28 21:59:10 · 285 阅读 · 0 评论 -
排序第六章:归并排序(递归调用)
#define MAX_SIZE 10typedef struct{ int m[MAX_SIZE ]; int length;} SqList;//用排序,铁定跑不了这个swap函数,最好自己写一个void swap(SqList *q, int i, int j);void swap(SqList *q, int i, int j){ int temp = q->m[i]; q->...原创 2018-03-27 14:49:31 · 393 阅读 · 0 评论 -
排序第五章:堆排序
#define MAX_SIZE 10typedef struct{ int m[MAX_SIZE ]; int length;} SqList;//用排序,铁定跑不了这个swap函数,最好自己写一个void swap(SqList *q, int i, int j);void swap(SqList *q, int i, int j){ int temp = q->m[i]; q->...原创 2018-03-27 13:15:00 · 254 阅读 · 0 评论 -
排序第四章:希尔排序
#define MAX_SIZE 10typedef struct{ int m[MAX_SIZE ]; int length;} SqList;//用排序,铁定跑不了这个swap函数,最好自己写一个void swap(SqList *q, int i, int j);void swap(SqList *q, int i, int j){ int temp = q->m[i]; q->...原创 2018-03-27 10:28:09 · 278 阅读 · 0 评论 -
排序第三章:直接插入排序
#define MAX_SIZE 10typedef struct{ int m[MAX_SIZE ]; int length;} SqList;//用排序,铁定跑不了这个swap函数,最好自己写一个void swap(SqList *q, int i, int j);void swap(SqList *q, int i, int j){ int temp = q->m[i]; q->...原创 2018-03-27 09:43:17 · 216 阅读 · 0 评论 -
排序第二章:简单选择排序
#define MAX_SIZE 10typedef struct{ int m[MAX_SIZE ]; int length;} SqList;//用排序,铁定跑不了这个swap函数,最好自己写一个void swap(SqList *q, int i, int j);void swap(SqList *q, int i, int j){ int temp = q->m[i]; q->...原创 2018-03-27 09:39:45 · 294 阅读 · 0 评论 -
排序第一章:探究冒泡排序
排序算法来说,这次的博客总共写了七个排序,按照排序的简单性来看分为两类:1.简单算法: 冒泡排序, 简单选择排序, 直接插入排序2.改进算法: 希尔排序, 堆排序, 归并排序, 快速排序从平均情况来看,最后三种改进算法要胜过希尔排序, 并且远远胜过前面三种简单算法。 而根据排序排序过程中借助的主要操作, 我们将排序分为四类:插入排序类: 直接插入排序, 希尔排序选择排序...原创 2018-03-27 09:34:41 · 339 阅读 · 1 评论 -
C++知识点4
继C++知识点3十一.下标和指针int ia[4] = {};表达式*(ia + 3)计算ia前进4个元素后的新地址, 解引用该结果指针的效果等价于表达式ia[3].很多情况下,使用数组的名字其实用的就是一个指向数组首元素的指针,例如当对数组使用下标运算符的时候,编译器会自动执行这个转换。ia【0】是一个使用了数组名字的表达式,对数组执行下标运算其实是对指向数组元素的指针执行下标运算。十二.复合表...原创 2018-03-03 20:59:34 · 157 阅读 · 0 评论 -
C++小知识3
继C++小知识2十.数组和指针int ia[3][4] = { 0,1,2,3,4 ,5,6,7,8,9,10,11}; for (int (*row)[4] = ia; row != ia + 3; row++) { cout << "row:" << (row) << endl; //输出row首元素的指针,当程序使用多维数组的名字时,会自动将其转换成指...原创 2018-03-01 21:30:08 · 138 阅读 · 0 评论 -
什么是预编译?
什么是预编译预编译就是指程序执行前的一些预处理工作,主要指#表示的。何时需要预编译1.总是使用不经常改动的大型代码体。2.程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。两种格式区别编辑文件包含有两种格式,分别是:#include "file" 和 #include 这两格式的区别在于:原创 2018-01-30 21:09:46 · 1500 阅读 · 0 评论