const:变量,只读[不能变] 内存属性: 1. 内存操作的大小 2.内存的变化性,可写可读 char *p; const char *p;     描述字符串,p指向的内容是只读的,不可再次修改 char const *p; char * const p;   硬件资源的定义 char *p const; const char *const p; 举个例子: 虽然在定义指针p的过程中,前面没有写const,但是默认了他是只读属性,不能对访问内容修改 这个segmentation fault就…
C语言中计算变量占用内存空间 在C语言中通常用[sizeof]运算符计算变量占内存空间,如下面的例子:…
指针:就是内存资源的地址.门牌号的代名词 假如你所在的城市是一个内存(存储器),如果找到你家,就是通过你的家庭住址(指针)寻找,而你家里的摆设面积之类的就是内存的内容(指针指向的内容). 指针变量:存放指针这个概念的盒子 c语言编译器对指针这个特殊的概念,有两个疑问? 1. 分配一个盒子,盒子要多大?? 在32bit系统中,指针就4个字节 在64bit系统中,指针就8个字节 可以看出一个系统中,所有指针的内存大小是一样的! 2. 盒子里存放的是地址,所指向内存的读取方式是什么? 我们一般看到 i…
头文件:#include <stdlib.h> malloc() 函数用来动态地分配内存空间(如果你不了解动态内存分配,请查看:C语言动态内存分配及变量存储类别),其原型为:void* malloc (size_t size); [参数说明]size 为需要分配的内存空间的大小,以字节(Byte)计. [函数说明]malloc() 在堆区分配一块指定大小的内存空间,用来存放数据.这块内存空间在函数执行完成后不会被初始化,它们的值是未知的.如果希望在分配内存的同时进行初始化,请使用 calloc…
经常在代码中看到使用malloc来分配,然后memset清零,其实calloc更加方便,一句顶两句~ 头文件:#include <stdlib.h> calloc() 函数用来动态地分配内存空间并初始化为 0,其原型为:     void* calloc (size_t num, size_t size); calloc() 在内存中动态地分配 num 个长度为 size 的连续空间,并将每一个字节都初始化为 0.所以它的结果是分配了 num*size 个字节长度的内存空间,并且每个字节的值都…
1. ++.--.+.- int a=100; a+1; 对比: int *p=xxx;  [0x12] p+1;           [0x12+1*sizeof(*p)] 指针的加法(减法)运算,实际上加(减)的是一个单位,单位的大小可以使用sizeof(p(0))获得 int *p   p+1 char *p p+1 p++  p-- 更新地址 2. [  ] 变量名[n] n:ID b标签 地址内容的标签访问方式 取出标签里的内存值 3. 逻辑操作符 >=       <=     …
四种权限修饰符.从大到小 纵向再分成四种情况 同一个类 同一个类里面.private方式,可以访问到本类里面的 num成员变量 前面不写修饰符也能访问到 (default)就是不写的这种情况 受保护的.本类的也能访问 public更可以访问了. private说的是同一个类里面可以访问.所以只要比private大 都是可以访问的.前面三个都比private范围大 同一个包 public 定义一个MyAnother类. MyClass和MyAnother是在同一个包内,也没有继承关系.是邻居关系…
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> int main(void) {     int *str1 = NULL;     int *str2 = NULL;     str1 = (int*)malloc(2*1024*sizeof(char));     str2 = (int*)malloc(6*1024*sizeof(char));   …
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> int main(void) {     int *str1 = NULL;     int *str2 = NULL;     str1 = (int*)malloc(2*1024*sizeof(char));     if(str1==NULL)     {         printf("mal…
C语言中储存类别和内存管理 储存类别 C语言提供了多种储存类别供我们使用,并且对应的有对应的内存管理策略,在了解C中的储存类型前,我们先了解一下与储存类型相关的一些概念. 1. 基础概念 对象:不同于面向对象编程中的对象的含义,C语言是面向过程编程,不存在这样对象的概念,这个对象指的是值储存所占据物理内存空间. 左值:左值是可以指定对象的表达式,它的最简单形式即为标识符,复杂的可以为为指针之类.一个表达式成为左值的前提是它确实指定了一块作为对象的储存空间,例如:  int a = 1;//a作为…
写在前面 今天下午一个同事问「register」关键字是什么作用?噢,你说的是「register」啊,它的作用是……脑袋突然断片儿,我擦,啥意思来着,这么熟悉的陌生感.做C语言开发时间也不短了,不过好像没有用到过「register」,但作用还是知道的,一下子想不起来了,一万个草泥马飞奔过来. 其实C语言中除了register外,还包含常见的const.static.volatile.auto.extern等修饰符,现在一起再总结一下好了. register 修饰符 register,寄存器变量,…
1. 类的修饰符分为:可访问控制符和非访问控制符两种. 可访问控制符是:公共类修饰符 public 非访问控制符有:抽象类修饰符 abstract :最终类修饰符 final 1.公共类修饰符 public : Java 语言中类的可访问控制符只有一个: public 即公共的.每个 Java 程序的主类都必须是 public 类作为公共工具.供其它类和程序使用的应定义为 public 类. 2 .抽象类修饰符 abstract :凡是用 abstract 修饰符修饰的类,被称为抽象类.所谓抽象…
前言 了解C++程序内存分配,有助于深刻理解变量的初始化值以及其生存周期.另外,变量类型修饰符也会影响到变量的初始化值及其生存周期.掌握了不同类型变量的初始化值及其生存周期,能够让我们设计程序时定义变量时更准确. 内存分配 1.     C++程序的内存布局 现代电脑都是遵循冯诺依曼体系结构,所以C++程序的内存布局也是遵循该体系的.主要包括5个部分,即代码段.数据段.BSS段.堆和栈.. 1.     代码段 代码段(code segment/text segment),通常是指用来存放程序执…
C 语言嵌入式系统编程修炼之一:背景篇 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发的一般选择.而与之相比,C 语言:一种"高级的低级"语言,则成为嵌入式系统开发的最佳选择. 实际上,大多数嵌入式系统的硬件平台包括两部分: 以通用处理器为中心的协议处理模块,用于网络控制协议的处理: 以数字信号处理器(DSP)为中心的信号处理模块,用…
#include<stdio.h> #include<stdlib.h> int main() { // char *p;//定义一个野指针:没有让它指向一个变量的地址 // *p='c';//直接对野指针进行操作,会报错 char *p1; p1=malloc(1);//动态开辟内存 *p1='d'; printf("%c\n",*p1); return 0; } malloc可以动态在堆上开辟地址,函数原型:void * malloc(size_t size…
C语言堆内存管理上出现的问题,内存泄露,野指针使用,非法释放指针 (1)开辟的内存没有释放,造成内存泄露 (2)野指针被使用或释放 (3)非法释放指针 (1)开辟的内存没有释放.造成内存泄露,以下的样例就可能造成20个字节的泄露,内存泄露不是一个马上会引发故障的错误,可是 它将消耗系统内存. void function1() { char *pa; pa = (char*)malloc(sizeof(char)*20); if(NULL !=pa) { strcpy(pa,"hello"…
C语言的程序内存布局,从高到低依次为:栈区.堆区.未初始化数据区.初始化数据区.代码区. 一.栈区 由编译器自己主动管理,无需程序猿手工控制.存放函数的參数值.局部变量的值等.栈区内容从高地址到低地址分配,从低地址到高地址存取. int a = 0; int b = 0; int array[5] = {1, 2, 3, 4, 5}; printf("&a......%p\n", &a); printf("&b......%p\n", &am…
=============================================================================对于c语言来讲,内存管理是一个很重要的内容,它与指针是息息相关的,因为内存的管理都是通过指针来实现的.-----------------------------------------------------------------------------如果一个变量,它处在所有的代码块之外,那么它的生命周期就是和整个程序是一起的,程序启动的时…
以前一直有个疑问,指向不同类型的指针到底占用的内存空间是多大呢? 这个问题我多次问过老师,老师的答案是"指向不同类型的指针占据的内存空间大小不同",我一直很之一这个答案,今天我就做了个小小的实验,发现的确老师的答案是错误的.废话不多说,直接上代码: #include<iostream> using namespace std; void main(){double j=5;double &i=j;double *pi=&i;cout<<"…
前言 最近用C刷PAT算法题目, 发现C语言有太多需要关注大小范围的东西必须 知道, 虽说挺麻烦, 但也挺有意思. int最大值是多少 首先就是int类型的取值范围, 这个太常用. C语言标准规定最低范围是 [-2^16 + 1, 2^16], 即[-65535, 65536], 但这个明显已经过时, 目前 绝大部分机器支持的int范围是[-2^32 + 1, 2^32], 也就是正负20个亿 左右, 因此大家刷题的时候只要整数范围是在20亿这个量级, 就可以大胆的 使用int, 不必动用lon…
今天来学习一下c语言类型修饰符及内存分布 1.auto int a; 默认在内存 2.register int a; 限制变量定义在寄存器上的修饰符 编译器会尽量安排CPU的寄存器去存放这个a,如果寄存器不足,a还是放在内存中 取地址符号&对a不起作用 3.static 应用场景: 1.函数内的变量 2.函数外的变量 3.函数的修饰符(函数也是一个变量) int fun() -->  static int fun() 第一.修饰局部变量的时候,局部变量不在栈空间,放到全局的数据段,延长了局部…
可变参数 有时,您可能会碰到这样的情况,您希望函数带有可变数量的参数,而不是预定义数量的参数.C 语言为这种情况提供了一个解决方案,它允许您定义一个函数,能根据具体的需求接受可变数量的参数.下面的实例演示了这种函数的定义. int func(int, ... ) { . . . } int main() { func(2, 2, 3); func(3, 2, 3, 4); } 请注意,函数 func() 最后一个参数写成省略号,即三个点号(...),省略号之前的那个参数是 int,代表了要传递的…
第一节: 上一个笔记 有趣的恶搞小程序 定时关机 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { //创建一个字符数组用于接收字符串 char input[20] = { 0 }; //使用system()执行定时关机的dos命令 命令库:#include <stdlib.h> system(&q…
动态内存分配 静态内存分配数组 int a[5]={1,2,3,4,5}  动态内存分配数组 int len=5; int *parr=(int *)malloc(sizeof(int) * len); 1.分配了 4*5 =20个字节的内存空间,返回了第一个字节的地址 2.第一个字节的地址无意义,所以强制转成int类型的地址int * 3.parr此时指向第一个字节的地址,相当于a,当成普通数组使用 *parr=4 <===> a[0]=4 parr[1] <===> a[1]…
头文件:#include <string.h> memset() 函数用来将指定内存的前n个字节设置为特定的值,其原型为:    void * memset( void * ptr, int value, size_t num ); 参数说明: ptr 为要操作的内存的指针. value 为要设置的值.你既可以向 value 传递 int 类型的值,也可以传递 char 类型的值,int 和 char 可以根据 ASCII 码相互转换. num 为 ptr 的前 num 个字节,size_t…
第一.了解内存空间 本文章文字有点多,会有点枯燥,配合图文一起看可以缓解枯燥,耐心阅读哦!!! 先了解内存地址,才更好的理解指针! 我们可以把内存想象为成一列很长很长的货运火车,有很多大小相同的车厢,而每个车厢正好相当于在内存中表示一个字节.这些车厢装着不同的货物,就像我们的内存要存着各式各样的数据. 多啰嗦一下 我们平时在电脑上能够听音乐.看视频和文章,其实看到的这些东西就是内存中每个“车厢”里面的数据,这些数据最终还是由二进制0/1演变而成. 虽然视频.文章.音乐等这些信息在我们眼里是不同的…
JAVA语言中的修饰符 -----------------------------------------------01----------------------------------------------- 类,方法,成员变量和局部变量的可用修饰符 访问控制级别分类: 公开级别,受保护级别,默认级别,私有级别 --------------------------------------------------02-------------------------------------…
一.C语言介绍 C是一种通用的编程语言,广泛用于系统软件与应用软件的开发.于1969年至1973年间,为了移植与开发UNIX操作系统,由丹尼斯·里奇与肯·汤普逊,以B语言为基础,在贝尔实验室设计.开发出来.C语言具有高效.灵活.功能丰富.表达力强和较高的可移植性等特点,在程序员中备受青睐,成为最近25年使用最为广泛的编程语言[2].目前,C语言编译器普遍存在于各种不同的操作系统中,例如Microsoft Windows, Mac OS X, Linux, Unix等.C语言的设计影响了众多后来的…
C语言有5种基本的数据类型,分别为 字符型.整型.单精度浮点型.双精度浮点型.空类型. 在不同的操作系统或硬件平台中,这些数据类型的值域范围和所占用的内存是有差异的.这种差异影响了C语言的可移植性能,但如果能深入理解数据类型的构成,则可以最大程度避免该问题. 2.1.1 基本数据类型的字长与范围 字长是指数据所占用内存的数量,字长决定了数据类型的值域,即范围.以字符型为例,ANSI C标准中的字符型的长度是 1 字节(8位二进制编码),可计算其值域为 -2的7次方 - +2的7次方,取值范围为…
002.GO语言基础 1 参考资料 1.1 http://www.cnblogs.com/vimsk/archive/2012/11/03/2736179.html 1.2 https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/02.2.md 1.3 官网: https://golang.org/ref/spec#Constants 2 helloworld 2.1 Go使用package(和Pyt…