自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

刘森林l的博客

个人的一些学习心得,毕竟初学,难免有所差错,希望可以留言指正,谢谢!

  • 博客(42)
  • 收藏
  • 关注

原创 不用第三个变量进行交换两数

#include<iostream>#include<stdio.h>using namespace std;int main (){ //加减法实现交换 int a = 2; int b = 3; a=a+b; //将变量a 与 b 的集合赋给 a 变量 b=a-b; //从集合中取出a,赋予b a=a-b;

2016-06-29 22:46:59 1204

原创 Nagle算法

用于自动连接许多的小缓冲器消息;这一过程(称为nagling)通过减少必须发送包的个数来增加网络软件系统的效率优 点 减少拥塞控制用 于 自动连接许多的小缓冲器消息简介Nagle算法是以他的发明人John Nagle的名字命名的,它用于自动连接许多的小缓冲器消息;这一过程(称为nagling)通过减少必须发送包的个数来增加网络软件系统的效率。Nagle算法于1984年定义为福特航空和

2016-06-29 00:12:32 4305

原创 HTTP详解

1. HTTP简介         HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。         在了解HTTP如何工作之前,我们先了

2016-06-28 23:38:35 5438

原创 TCP、IP详解(转)

注:因在网上看到有位大神写的不错,就借鉴下了TCP/IP详解学习笔记(1)-基本概念为什么会有TCP/IP协议在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样。计算机使用者意识到,计算机只是单兵作战并不会发挥太大的作用。只有把它们联合起来,电脑才会发挥出它最大的潜力。于是人们就

2016-06-28 22:56:45 4848

原创 UDP理论详解

我们已经讲解了物理层、连接层和网络层。最开始的连接层协议种类繁多(Ethernet、Wifi、ARP等等)。到了网络层,我们只剩下一个IP协议(IPv4和IPv6是替代关系)。进入到传输层(transport layer),协议的种类又开始繁多起来(比如TCP、UDP、SCTP等)。这就好像下面的大树,根部(连接层)分叉很多,然后统一到一个树干(网络层),到了树冠(传输层)部分又开始开始分叉,

2016-06-28 21:54:40 15052

原创 UDP 编程中的sendto() 与recvfrom()解析(转)

sendto() 简述: 向一指定目的地发送数据。includeint PASCAL FAR sendto( SOCKET s, const char FAR* buf, int len, int flags, const struct sockaddr FAR* to, int tolen);s:一个标识套接口的描述字。 buf:包含待发送数据的缓冲区。 len:buf缓冲区中数据的长度

2016-06-28 00:45:23 31836

原创 send() recv() 解析(转载)

转自:http://blog.csdn.net/gogor/archive/2010/09/20/5896931.aspx 1. send函数 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户端还是服务器端应用程序都用send函数来向TCP连接的另一端发送数据。 客户端程序一般用send函数向服务器发送请

2016-06-28 00:28:17 761

原创 TCP 的三次握手 与 四次挥手详解(转载)

建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:先来看看如何建立连接的。首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。那如何断开连接呢?简单的过程如下:

2016-06-27 23:43:24 2952

原创 UDP 与TCP 理论小结

TCP与UDP的区别1. 理解:窗口和滑动窗口TCP的流量控制TCP使用窗口机制进行流量控制什么是窗口?连接建立时,各端分配一块缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端接收方发送的确认信息中包含了自己剩余的缓冲区尺寸剩余缓冲区空间的数量叫做窗口2. TCP的流控过程(滑动窗口)2. TCP 与UDP的区别 很多文章都说TCP协议可靠,U

2016-06-27 23:31:17 2364

原创 理论讲解TCP 与UDP的编程步骤

TCP编程的服务器端一般步骤是:   1、创建一个socket,用函数socket();   2、设置socket属性,用函数setsockopt(); * 可选   3、绑定IP地址、端口等信息到socket上,用函数bind();   4、开启监听,用函数listen();   5、接收客户端上来的连接,用函数accept();   6、收发数据,用函数send()和re

2016-06-27 23:16:03 1144

原创 -> * 与 .* 的简单剖析

#include<iostream>#include<stdio.h>using namespace std;int main(){ char str[]="hello"; cout << sizeof(str)<<endl; //数组名代表整个数组的大小,值为首元素的地址 char ds[5][5] ={"hell","jin"};//与上同理 c

2016-06-27 00:31:13 520

原创 C++中构造函数、拷贝构造、赋值函数

#include<iostream>using namespace std; class test { public:/* 构造函数 **************/ test() { } test(int a,short id) {

2016-06-25 23:19:02 636

原创 函数指针实战一

/* 本例主要测试函数指针的如何使用以及如何传参,和回调函数**/#include<iostream>#include<stdio.h>using namespace std;typedef void * (*PInt)(int *,char *); //相当声明了一个函数指针类型PInt pInt; //定义了一个全局函数指针变量void fun (int a,PInt b

2016-06-25 23:08:05 597

原创 一个例子解释“数组名"的含义

```#include<iostream>#include<stdio.h>using namespace std;int main(){ char str[]="hello"; cout << sizeof(str)<<endl; //数组名代表整个数组的大小,值为首元素的地址 char ds[5][5] ={"hell","jin"};//与上同理

2016-06-25 22:49:37 955

原创 取整 / 与 取余 % 小结

#include<iostream>#include<stdio.h>using namespace std;int main(){ //取整运算结果正负 是由除数与被除数 共同决定 int a = 6 ; int b = 2; cout << a/b << endl; a = -6; b = 2; cout << a/b

2016-06-24 23:46:56 12211

原创 FPGA实现可综合红绿灯设计

功能代码:module traffic(CLK,EN,LAMPA,LAMPB,ACOUNT,BCOUNT,Ra,Ga,Ya,LGa,Rb,Gb,Yb,LGb); //端口说明 output [7:0] ACOUNT,BCOUNT; output Ra,Ga,Ya,LGa,Rb,Gb,Yb,LGb; output [3:0] LAMPA,LAMPB; i

2016-06-23 13:01:38 6873 3

原创 关键字sizeof()小结

注意: cout << sizeof(&str)<#include<iostream>#include<stdio.h>using namespace std;void fun (int str[10]) { cout << sizeof(str)<<endl; //4 数组名当为形参传递时,相当指向

2016-06-21 23:57:14 605

原创 51单片机验证牛顿第二定律

51单片机验证牛顿第二定律运用定时器外部中断lcd1602的 显示数据的处理#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};#define s

2016-06-20 12:55:30 894

转载 while(1) 与for(;;) 的区别

一、 背景今天在网上看到一篇blog,文章题目是《C代码优化方案》,其中有一节说到while(1)和for(;;)两种无线循环,哪种效率更高?但是,在现代编译器上,其实两种无线循环效率都是一样的。二、 以前为什么会出现for(;;)比while(1)的无线循环的效率高呢?在《C代码优化方案》中,这样写道:在编程中,我们常常需要用到无限循环,常用的两种方法是while (1) 和 for (

2016-06-16 23:59:43 1724

原创 递归与尾递归

递归算法是一种直接或者间接调用自身函数或者方法的算法。 递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。 递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。递归算法,其实说白了,就是程序的自身调用。它表现在一段程序中往往会遇到调用自身的那样一种coding策略,这样我们就可以利用大道至简的思想,把一个大的复杂的问

2016-06-16 23:49:11 1789

原创 排序算法之——直接选择排序(三)

直接选择排序与直接插入排序类似,都将数据分为有序区与无序 区, 不同点: 直接插入排序是将无序区第一个元素直接插入到有序区形成 更大的有序区, 直接选择排序是从无序区选一个最小的元素直接放到有序区最后#include<stdio.h>#include<math.h>#define N 10using namespace std;int main (

2016-06-16 22:54:44 777

原创 排序算法之——冒泡排序(一)

冒泡排序: 假设数组长度为N,从大到小进行排序 1.比较相邻前后两个数据,如果前一个小于后面的数据,就将两数交换 2.这样对数组进行一次遍历,则最小数“浮”到最后 3.N = N -1 ,重复前两步#include<stdio.h>#include<math.h>#define N 10using namespace std;int main (int arg

2016-06-16 22:11:45 755

原创 排序算法之——直接插入排序(二)

基本思想: 一个待排序数组,开始划分为一个有序数组和无序数组,即就是假设 a[0]为有序 a[1]…a[n-1]为无序数组,每次将一个待排序的数组的第一个元素与有序区进行比较,然后 插入合适的位置本例是采用优化的插入排序算法,结构简单 思路: j代表前面有序的元素个数, 将a[j] 插入到前面a[0]…a[j - 1] ,用数据交换代替数据移动,如果a[j - 1] >

2016-06-16 22:06:29 371

原创 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2016-06-16 22:02:14 496

原创 整数数组 与 字符数组 辨析

main (){int  a[] = {1,2,3,4,5};char b[] = "12345";int length = sizeof(a)/sizeof(int);printf("%d\n",length);printf("%d\n",sizeof(a));   //整数数组末尾是无\0的printf("%d\n",sizeof(b));  //字符数组默

2016-06-16 15:43:11 1325

原创 二维指针 与 指针数组

看了一些资料,指向二维数组的指针定义方式并不是直接定义指针的指针int   a[3][6];int **p=a;        像这样定义是错误的因为a代表着除了第一列以外的列数的维数大小,如a+1的地址就是a[1]的地址,也就是a[1][0]的地址,而p仅是整形指针的指针,没跨越一次就是4字节,因此他们的大小是不匹配的,所以这样子直接等于号是不正确的。要真正的定义方式应概

2016-06-13 18:21:17 1037

原创 二维数组的深度解剖

小结: int a[3][2]; a 的值 = a[0]的值= a[0][0]的地址 a +1 = a[0] +1 a 的地址 由系统分配 &a 指整个二维数组#include#includeusing namespace std;int main (){

2016-06-13 17:27:58 773

原创 二维数组定义及初始化

#include#includeusing namespace std;int main (){    int a[3][2] = {(0,1),(2,3),(4,5)};//注意逗号表达式int *p;p = a[0];cout return 0;}#include#includeusing namespace std;int

2016-06-13 17:04:56 24717 2

原创 数组指针与指针数组

指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针数组指针:a pointer to an array,即指向数组的指针还要注意的是他们用法的区别,下面举例说明。int* a[4]     指针数组                      表示:数组a中的元素都为int型指针                     元素

2016-06-13 12:58:18 749

原创 指针与数组的区别

 一.指针与数组的联系:指针与数组是C语言中很重要的两个概念,它们之间有着密切的关系,利用这种关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之间的联系及在编程中的应用。1.指针与数组的关系  当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。如:  char str[20], *ptr;  ptr=str;  ptr被置为数组st

2016-06-13 00:24:21 852

原创 指针

指针: 指针就是地址,指针值就是地址值。指针变量就是存放指针的变量,所以一定不要将指针与指针变量搞混淆了。指针仅仅是一个地址值,而指针变量就是存放指针(也就是地址的变量)指针的定义:例如整型指针: int *p;p是一个指向int类型数据的指针变量。里面存放的地址(也就是指针)是一个int类型变量的地址。指针变量时有类型的,例如p

2016-06-12 23:50:01 378

原创 指针与引用

引用和指针三大区别:     1.引用必须初始化,指针不必.     2.引用初始化后不能被改变,指针可以改变所指的变量.     3.不存在指向空值的引用,但是存在指向空值的指针.c++中的引用与指针的区别    ★ 相同点:    1. 都是地址的概念;    指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。

2016-06-12 23:48:16 737

原创 一道题解读“类型强转”在内存中发生了什么

小结: 指针的值是所指元素分配内存大小,逻辑地址内存单元的地址内存单元里面是所指元素的内容,以补码二进制存储,方便起见,化为16进制     要想弄懂,必须知道元素在计算机内存是咋存储的,也就是内存影像图类型强转就是对所能读取内存单元的改变,指类在内存作用是,地址单元的映射长度short   a = 1      如图1int b = 32; 

2016-06-12 00:26:56 724

原创 测试机器是否为 大端or小端

所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的lon

2016-06-11 22:24:03 711

原创 a 与&a 的区别

struct Test{int Num;char *pcName;short sDate;char cha[2];short sBa[4];}*p;假设p 的值为0x100000。如下表表达式的值分别为多少?p + 0x1 = 0x___ ?(unsigned long)p + 0x1 = 0x___?(unsigned int*)p + 0x1 =

2016-06-11 00:20:46 1097

原创 数组 a 与 &a 的区别联系

int a[10];那么 a 的值是 数组首元素的首地址        &a 的值也是上面的但是区别        &a数组a的首地址     对指针加1 得到是下一个元素的地址,一个类型为T,+1 是以sizeof(T)为移动单位的#includeint main(int argc,char *argv[]){ 

2016-06-10 00:16:29 467

原创 计算机中的原码、反码、补码(上)

正数    :原码、反码、补码是一样的负数:反码 = 除去符号位 按位取反           补码 = 反码加1计算机里存储的是补码注:      要注意溢出情况   列如: char   i;           它所能存储的范围是-128  ----- +127    总共是256个数           原本是-127 --- -

2016-06-09 20:54:26 1397

原创 计算机中的原码、反码、补码(下)

在数学中, 是将正号“+” 和负号“ -”放在绝对值前面来表示该数是正数还是负数的。 而在计算机中则使用符号位来表示正、负数。 符号位规定放在数的最前面, 用“ 0”表示正号, “ 1” 表示负号, 其余位仍表示数值( 2进制表示) 。 在计算机中, 数有3种表示方法:原码、 补码、 反码。原码表示法:表示方法: 原码表示方法中, 数值用绝对

2016-06-08 10:41:19 1760

原创 关键字sizeof()小结

#include#includeusing namespace std;void fun (int str[10]){cout                              //数组首元素首地址的指针,这是避免拷贝                             //浪费内存}int main (int a

2016-06-08 01:10:39 375

原创 C++中的类与对象

类是把函数和一些成员数据放在一起,类似于结构体struct。 声明格式是 class+类名 { 数据成员 +成员函数 } 。 class 是必须的关键词。 对象就是把 “类” 实例化 ,也类似于结构体变量的声明,它的创建格式是 类名+对象名,比如有一个已经定义的类 A ,可以这样把A实例化 A a ; a就是你创建的对象。只有创建了对象,类才能发挥作用。在C++中,类是一种数据类型

2016-06-07 18:14:11 761

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除