(物联网的分层的概念 b/s c/s 结构 习惯: 在C语言 0 函数执行成功 <0是错误 >1做一些返回值处理 3 课前准备 工作经验,记录 4 数据类型的本质 数据类型的本质是固定大小内存块的别名 sizeof 求数据类型大小 所以前面加40 后面加4 指针的跨度取决于指针类型 +-X/也是操作符, 总结:数据类型的本质是固定内存块大小的别名 5变量的本质分析 变量的本质就是固定内存块的别名 6内存四区(上) 操作系统将程序加载到内存中 代码区,堆区,栈区,全局区 (每个操作系统都是不一样…
内存四区模型:操作系统给C/C++编写的程序分配内存,通常将分配的内存划分为以下四个区域:1.栈区:存放局部变量,用完由操作系统自动释放2.堆区:动态分配给程序的内存区域,由程序员手动释放3.数据区:分为两种:(1)常量区:存放常量,一般是字符串常量(2)全局区/静态区:存放全局变量和静态变量4.代码区:存放可执行代码的区域 示例如下: int main() { ] = "aaaa"; char buf2[] = "bbbb"; "; //动态分配内存 *…
  内存四区模型 流程说明1.操作系统把物理硬盘代码load到内存2.操作系统把c代码分成四个区3.操作系统找到main函数入口执行 1.内存四区: 一个由c/C++编译的程序占用的内存分为以下几个部分1.栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方 式类似于数据结构中的栈.2.堆区(heap: 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回   收 . 注意它与数据结构中的堆是两回事,分配方式倒是类似于链表. 3.数据区:主要包括静态全…
首先是操作系统将代码程序加载到内存中 然后将内存分为4个区 栈区,程序的局部变量区,函数传递的参数,由编译器自动进行内存资源的释放. 堆区,动态内存申请,如果不手动释放内存,则这块内存不会进行析构. 全局区,静态区,常量区(字符串存放的位置),程序结束后,有操作系统释放 代码区,存放函数体的二进制代码. 最后,操作系统找到main函数的入口,就开始代码的执行. 一般内存四区中的栈的开口方向是向下的.为什么要这样设计呢,因为设计栈的方向向下,可以给应用程序设定栈的大小,这样就可以避免栈溢出. 不管…
数组与指针 当数组做函数参数的时候,会退化为一个指针 此时在函数内是得不到数组大小的 因此,数组做函数参数的时候需要传递数组大小,也就是多传递一个参数 void func(int arr[], int num) { ··· } 若存在以上函数,c/c++编译器在编译的时候,会将数组优化为一个指针,指向数组的首地址,因此无法通过sizeof获得数组大小 以下可看作是c/c++编译器的优化过程 int a[10] => int a[] => int *p void func(int *p, int…
GO语言的进阶之路-初探GO语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么我们需要一门新语言 Go语言官方自称,之所以开发Go 语言,是因为“近10年来开发程序之难让我们有点沮丧”. 这一定位暗示了Go语言希望取代C和Java的地位,成为最流行的通用开发语言. 编程语言已经非常多,偏性能敏感的编译型语言有 C.C++.Java.C#.Delphi和Objective-C等,偏快速业务开发的动态解析型语言有PHP.Python.Perl.Ruby.JavaScr…
最近重新学习C语言相关知识,重新提到内存四区的概念,那么在之前的学习的基础上,在这儿做一个简单的总结与分享. 一.内存四区建立的流程 可以简单直观的查看下面的这个图片,直接的说明我们的程序在内存中是如何去存储,运行.... ​ 程序运行的流程说明 1.操作系统把物理硬盘代码 load到内存 2.操作系统把c代码分成四个区 3.操作系统找到 main函数入口执行 二.各区元素分析 栈区(stack):由编译器自动分配和释放,存放函数的参数值,局部变量的等临时的值. 堆区(heap):一般由程序员分…
前言: 为啥叫C语言程序猿必会呢?因为特别重要,学习C语言不知道内存分区,对很多问题你很难解释,如经典的:传值传地址,前者不能改变实参,后者可以,知道为什么?还有经典面试题如下: #include <stdio.h> #include <stdlib.h>#include <stdlib.h> void getmemory(char *p) { p=(); } int main( ) { char *str=NULL; getmemory(str); strcpy(st…
1.while模型 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> //求一个字符串中某个子串出现的次数 int getCout(char *str, char *substr, int *count) { ; char *p = str; ; if (str==NULL || substr== NULL || count==NULL)…
1.会产生野指针的做法 #include <stdio.h> //这就是一种错误的写法 int main(){ int *p = NULL; p = (); //释放P所指向的内存空间,但指针变量p仍然留在栈中,成为了野指针 if (p != NULL){ free(p); } if (p != NULL){ free(p); } ; } 2.正确的做法: #include <stdio.h>//指针变量和指针所指向的内存变量是两个不同的概念 //使用动态内存分为三步 //1.定义…
按照老版操作系统来学习,内存对于程序来讲分四区.分别是 代码区,静态区,栈,堆. 由上面程序执行的结果可知: 貌似结果就是 静态代码堆栈 静态区存放的是程序中所有静态变量和常量的值.静态区的大小是程序加载到内存之后就固定的,不会再发生改变. 代码区中存放的是程序中的代码,不能修改它的值,只能通过指针或者变量名来使用函数.[当然强行修改是被允许的但是可能发生未知错误.] 堆是一块很大的区域,通常情况下是4G的大小,(这个数字通常情况下是虚拟的,但是可以利用现代操作系统来利用硬盘模拟出来这么一块儿空…
接上篇内存四区的堆区的总结,下面做一些栈区的相关总结. 一.栈区的分析: 就下面测试程序 #include "stdio.h" #include "string.h" char *getMem() { ]; strcpy(buf, "aabbccdd"); return buf; } int main(int argc, const char **argv) { char *tmp = NULL; tmp = getMem2(); printf(…
接上篇,内存四区的分析-静态区,下面来说明一下堆区总结. 堆区分析: 堆区(heap):一般由程序员分配释放(动态内存申请与释放),若程序员不释放,程序结束时可能由操作系统回 就下面的程序: #include "stdio.h" #include "string.h" char *getMem(int size) { char *p = NULL; p = (char *)malloc(sizeof(char) * size); if(p == NULL) retu…
(1)代码区通常是共享只读(代码无法修改)的,即可以被其他的程序调用,例如运行两个qq,除了数据不一样,代码都是一样的, 每次运行qq,都会将代码和数据加载到内存中,除了数据,每次加载的代码都是一样的,可以大大节省内存. (2)栈是由系统分配内存,栈的内存是固定的. (3)堆区是程序员自己分配内存和释放内存,如果不释放内存,那么就只能等程序结束后才会由系统回收.内存不释放,那么在程序运行期间可能会导致内存不够用. 程序在没有运行前只有代码区和数据区,运行程序后会加载到内存中,才有堆区和栈区. 数…
GO语言的进阶之路-goroutine(并发) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 有人把Go比作21世纪的C 语言,第一是因为 Go语言设计简单,第二,21世纪最重要的就是并行程序设计,而GO 从语言层面就支持了并行.Go语言中最重要的一个特性,那就是 go 关键字.优雅的并发编程范式,完善的并发支持,出色的并发性能是Go语言区别于其他语言的一大特色.使用Go语言开发服务器程序时,就需要对它的并发机制有深入的了解. 一.并发基础          回到在Windo…
GO语言的进阶之路-流程控制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑.流程控制语句有三个作用,第一,选择(根据条件跳转到不同的执行序列): 第二,循环(根据条件反复执行某个序列)第三,跳转(据条件返回到某执行序列). 一.流程控制语句类型 Go语言支持如下的几种流程控制语句: 1>.条件语句:关键字为if.else和else if. 2>.选择语句:关键字为switch.c…
GO语言的进阶之路-网络安全之proxy 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在党的带领下,我们大陆的孩子身心健康还是杠杠的,尤其是像我这种农村孩纸,从来不会像<人命的名义>的法院陈清泉哪样学英语,也不知道什么你们城里人总是挂嘴边的“亚麻得”是啥意思哈~就是偶尔会问一些我二师兄(谷歌)一些我不太懂的知识,相信我大师兄大家也都认识,顶顶大名的百度是也.当然,偶尔也要下载一些github的一些插件用于学习研究.就是因为这么一点点的需求感,导致我不得不学习一下代理,即p…
GO语言的进阶之路-网络编程之socket 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是socket; 在说socket之前,我们要对两个概念要有所了解,就是IP和端口. 1.什么是IP: IP地址是我们进行TCP/IP通讯的基础,每个链接到网络的计算机都必须有一个IP地址.在这里我不打算给大家说IPV4和IPV6,也不打算说主机位和网络位. 我们可以简单的理解,在局域网中,IP就是用来标识主机的.(大家不要钻牛角尖说NAT这种情况,我们在这里是忽略的.) 2.什…
GO语言的进阶之路-爬虫进阶之路 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 网络爬虫是一种自动获取网页内容的程序,是搜索引擎的重要组成部分.我们今天要介绍的就是一个简单的网络爬虫,可以爬取img,script文件,当然你也可以修改一下你的脚本程序,进行爬去avi,mp4,rmvb等等.将趴取到的内容下载下来,然后打包成一个压缩文件,最终实现的效果就是用户访问一个网站就能将内容download下来.是不是很带劲?那就跟着我的脚本一起探索其中的乐趣吧. 本来是想把代码贴在这里…
GO语言的进阶之路-协程和Channel 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 看过我之前几篇博客小伙伴可能对Golang语言的语法上了解的差不多了,但是,如果想要你的代码和性能更高,那还得学点晋升的本来,这个时候我们就需要引入Golang的协成这个概念了,其实,你可能早就听说了Golang的优势就是处理大并发,我们可以用它来做日志收集系统,也可以用它做业务上的“秒杀系统”,当然我们还可以用它来做“监控系统”.好了,下面跟我一起来体会一下Golang的五味杂陈吧. 一…
GO语言的进阶之路-面向对象编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 当你看完这篇文章之时,我可以说你的Golang算是入门了,何为入门?就是你去看Docker 源码能看懂60%的语法结构,因为涉及一些unix的代码可能没有Linux运维基础的同学在学习的时候会很吃力,看起来也会带来一定的难度,如果有时间的话我会给大家解析Docker部门精辟的源码.好了,回归正题吧,我们今天要学习的内容是什么呢?即面向对象编程.当然,不要用屌丝的心态来说:“那要是没对象的还咋编程呢…
GO语言的进阶之路-面向过程式编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们在用Golang写一个小程序的时候,未免会在多个地方调用同一块代码,这个时候如何优化你的代码呢?这就是本片文章要学习的内容,即函数.当然这篇文章不仅仅会介绍函数的知识,还会介绍一些系统的标准输入和标准输出的知识点. 一.函数: 有可能你学习过其他语言的函数,那么在学习Golang这门语言的时候,你先忘记之前学习的函数如何定义的吧.还记得<倚天屠龙记>中的男主张无忌吗?有一集再演太极拳创始人…
GO语言的进阶之路-Golang高级数据结构定义 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们之前学习过Golang的基本数据类型,字符串和byte,以及rune也有所了解,但是说起高级点的数据类型,可能我们还是不太清楚,那么今天就跟着我脚步一起学习一下这些高级数据类型数据吧.相信有部分人可能学习过Python,那么我这篇博客基本上不用看了,因为对你来说会觉得so easy.因为太多的相似之处了,只是写法不同.本章主要介绍数组(array),切片(scice),字典(m…
GO语言的进阶之路-Golang字符串处理以及文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们都知道Golang是一门强类型的语言,相比Python在处理一些并发问题也是有过之而无不及,甚至可以说远远的甩python几条街.学过python基础或是shell的童鞋应该知道我们在定义一个变量的时候是不需要指定其所属数据类型的,直接让其等于一个变量即可,他们的解释器会自动识别你定义的是个整数,浮点数,字符串,还是数组或是函数.而Golang在定义每个变量的时候都被指定…
GO语言的进阶之路-go的程序结构以及包简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编辑,编译和运行 A,编辑 Go程序使用UTF-8编码的纯Unicode文本编写.大部分现代编译器都能够自动处理编码,并且某些最流行的编辑器还支持Go语言的语法高亮和自动缩进.如果你用的编辑器不支持Go语言,可以在Go语言官网的搜索框中输入编辑器的名字,看看是否有适合的插件可用.为了编辑方便,所有的Go语言关键字和操作符都使用ASCII编码字符,但是Go语言中标识符可以是任一Uni…
12天学好C语言--记录我的C语言学习之路 Day 12: 进入最后一天的学习,用这样一个程序来综合考量指针和字符串的关系,写完这个程序,你对字符串和指针的理解应该就不错了. //输入一个字符串,内有数字和非数字字符,如:A123x456 17234?532tab32622,然后将,123,456,17234,532,32622这些被非数字字符分割开的数字找出来,输出这些数. //此程序的关键点在于遇到需要输出的字符就记录下来,然后判断他的下一个字符是不是有效字符,有效则不做判定继续执行有效字符…
12天学好C语言--记录我的C语言学习之路 Day 11: 因为指针部分比较的难,所以我们花费的时间也是最长的,希望大家耐的住性子,多多理解,多多打代码.好了,废话不多说,来看第11天的学习. //编写一个求定积分的通用函数,分别求出x+1,2*x+3,x*x*x的定积分 /*program 11.1 #include <stdio.h> int main() {     void djf(int x,int y,double (*p)(int,int));//大的函数也要有上下限做形参,因为…
12天学好C语言--记录我的C语言学习之路 Day 10: 接着昨天的指针部分学习,有这么一个题目: //还是四个学生,四门成绩,只要有学生一门功课没及格就输出这个学生的所有成绩 /*//program 10.1 #include "stdio.h" int main() {     void search(float (*p)[4],int n);     float a[4][4]={{80,70,60,59},{90,75,85,55},{70,90,80,75},{65,95,…
12天学好C语言--记录我的C语言学习之路 Day 9: 函数部分告一段落,但是我们并不是把函数完全放下,因为函数无处不在,我们今后的程序仍然会大量运用到函数 //转入指针部分的学习,了解指针是什么 /*//program 9.1  #include<stdio.h>  int main()  {  int c=123,d=345;  int *a,*b;//定义两个整型的指针变量(int 是指针变量的基类型,我们必须在定义指针变量的时候指定基类型,因为变量的类型不同决定了他们在内存中所占字节…
12天学好C语言--记录我的C语言学习之路 Day 8: 从今天开始,我们获得了C语言中很有力的一个工具,那就是函数.函数的魅力不仅于此,一个程序到最后都是由众多函数组成的,我们一定要用好函数,用熟练.函数掌握了,就会对你的编程水平有不小的提升. 还是以一个简单的程序开始今天的学习: //输入10个数字,要求输出最大值和该值是数组中第几个元素(当然要用到函数思想) /*//program 8.1 #include "stdio.h" int main() {     int a[11]…