c语言指针

JVM笔记(一) Java内存区域

蓝咒 提交于 2020-03-27 08:38:33
Java 内存区域 总概 java虚拟机在执行java程序的过程中,会把它管理的内存划分为几个不同的数据区域。每当运行一个java程序时,就会启动一个虚拟机。 具体的区域如图所示: 同时,方法区 与 堆 是由所有线程共享的数据区;而 虚拟机栈、本地方法栈、程序计数器 则是被线程隔离的区域。 一、程序计数器 什么是程序计数器? 概念 :就是当前线程所执行的字节码的行号指示器。 JVM的概念模型中,字节码解释器通过改变这个计数器的值来选取下一条字节码指令。 JVM的多线程其实就是通过线程轮流切换并分配处理器执行时间的方式来实现的( 在任何一个确定的时刻内,一个处理器都只会执行一条线程中的指令 )。为了线程切换后能够恢复到正确的执行位置,每条线程都需要有 独立的程序计数器 ,各线程计数器互不影响,独立存储。 所以,程序计数器是 线程私有 的内存区域 如果线程执行一个Java方法,计数器记录的是正在执行的虚拟机字节码指令的地址;如果执行的是Native方法,则计数器的值为空。 Java虚拟机规范中唯一一个 没有规定任何OutOfMemoryError情况 的区域。 二、Java虚拟机栈 线程私有,生命周期与线程相同。 虚拟机描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个 栈帧(Stack Frame) 用于存储局部变量表、操作数栈、动态链接、方法出口等信息。(PS

数组和指针

房东的猫 提交于 2020-03-23 12:00:52
本节结束。================================================================== 数组类型:是一个复杂类型;(由数组元素类型和数组长度综合表述)如下;数组类型是:(int []); 类型的本质是:固定大小内存块的别名。是模具。 一. 对一维数组 C语言规定: int c[10]; 1.一维数组名:c是数组首元素的地址,c+1步长为 4个字节,一个 int 元素大小。 &c是整个数组的地址,&c+1步长为40个字节,十个 int 元素大小 虽然c和&c的值相同,但是他们所代表的步长不同。 2.数组第i 个元素这样表示:c[i] 或 *(c+i); 给它赋值。c[i] = 5 或 *(c+i) = 5; 本节结束。================================================================== 二. 多维数组(int a[3][4]) 1.多维数组名:a是指向一个一维数组 的数组指针,a 的步长为一维的长度(即每次+1都跳一行)(16个字节,四个int元素元素大小) 2.(a+i)代表是整个第i行的地址,(代表二级指针) *(a+i)代表第i行首元素地址 (代表一级指针) *(a+i)+j或(&a[i][j])代表第i行第j个元素的地址 *(*(a+i)+j)或(a[i]

指针的了解

放肆的年华 提交于 2020-03-23 09:21:25
在计算机科学中, 指针 (Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。 在高级语言中,指针有效地取代了在低级语言,如汇编语言与机器码,直接使用通用暂存器的地方,但它可能只适用于合法地址之中。指针参考了存储器中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。作个比喻,假设将电脑存储器当成一本书,一张内容记录了某个页码加上行号的便利贴,可以被当成是一个指向特定页面的指针;根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,就相当于是对这个指针进行反参考的动作。 在信息工程中指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中寄存器(Register)【用来指向该内存地址所对应的变量或数组】。指针一般出现在比较接近机器语言的语言,如汇编语言或C语言。面向对象的语言如Java一般避免用指针。指针一般指向一个函数或一个变量。在使用一个指针时,一个程序既可以直接使用这个指针所储存的内存地址,又可以使用这个地址里储存的函数的值。 使用指针来读取数据,在重复性操作的状况下,可以明显改善程序性能,例如在遍历字符串,查取表格

资料——指针

Deadly 提交于 2020-03-23 09:20:04
在计算机科学中, 指针 (Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的 内存单元 。在 高级语言 中,指针有效地取代了低级语言,如 汇编语言 与机器码,直接使用通用 暂存器 的地方,但它可能只适用于合法地址之中。指针参考了 存储器 中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。作个比喻,假设将电脑存储器当成一本书,一张内容记录了某个页码加上行号的便利贴,可以被当成是一个指向特定页面的指针;根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,就相当于是对这个指针进行反参考的动作。 在信息工程中指针是一个用来指示一个 内存地址 的计算机语言的变量或 中央处理器 (CPU)中 寄存器 (Register)【用来指向该内存地址所对应的变量或数组】。指针一般出现在比较接近 机器语言 的语言,如汇编语言或 C语言 。 面向对象 的语言如 Java 一般避免用指针。指针一般指向一个函数或一个变量。在使用一个指针时,一个程序既可以直接使用这个指针所储存的内存地址,又可以使用这个地址里储存的函数的值。 来源: https://www.cnblogs.com

C语言指针的概念

拥有回忆 提交于 2020-03-23 09:17:37
在计算机中,所有的数据都是存放在内存中的,一般把内存中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不一样,如int占用4个字节,char占用1个字节。为了正确地访问这些内存单元,必须为每个内存单元编上号。每个内存单元的编号是唯一的,根据编号可以准确地找到该内存单元。 内存单元的编号叫做地址(Address),也称为指针(Pointer)。 内存单元的指针和内存单元的内容是两个不同的概念。 可以用一个通俗的例子来说明它们之间的关系。我们用银行卡到ATM机取款时,系统会根据我们的卡号去查找账户信息,包括存取款记录、余额等,信息正确、余额足够的情况下才允许我们取款。在这里,卡号就是账户信息的指针, 存取款记录、余额等就是账户信息的内容。对于一个内存单元来说,单元的地址(编号)即为指针,其中存放的数据才是该单元的内容。 在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。 设有字符变量c,其内容为 'K'(ASCII码为十进制数 75),c占用了0X11A号内存单元(地址通常用十六进数表示)。设有指针变量p,内容为 0X11A,这种情况我们称为p指向变量c,或说p是指向变量c的指针。 严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针

[C]为什么发明指针?

故事扮演 提交于 2020-03-23 09:16:18
指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。 学习指针是学习C语言中最重要的一环, 能否正确理解和使用指针是我们是否掌握C语言的一个标志。同时, 指针也是C语言中最为困难的一部分,在学习中除了要正确理解基本概念,还必须要多编程,上机调试。只要作到这些,指针也是不难掌握的。 指针的基本概念 在计算机中,所有的数据都是存放在存储器中的。 一般把存储器中的一个字节称为一个内存单元, 不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等, 在第二章中已有详细的介绍。为了正确地访问这些内存单元, 必须为每个内存单元编上号。 根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址。 既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。 内存单元的指针和内存单元的内容是两个不同的概念。 可以用一个通俗的例子来说明它们之间的关系。我们到银行去存取款时, 银行工作人员将根据我们的帐号去找我们的存款单, 找到之后在存单上写入存款、取款的金额。在这里,帐号就是存单的指针, 存款数是存单的内容。对于一个内存单元来说,单元的地址即为指针,

C语言指针的概念

萝らか妹 提交于 2020-03-23 09:15:51
在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍。为了正确地访问这些内存单元,必须为每个内存单元编上号。根据一个内存单元的编号即可准确地找到该内存单元。 内存单元的编号也叫做地址。既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。 内存单元的指针和内存单元的内容是两个不同的概念。 可以用一个通俗的例子来说明它们之间的关系。我们到银行去存取款时,银行工作人员将根据我们的帐号去找我们的存款单, 找到之后在存单上写入存款、取款的金额。在这里,帐号就是存单的指针, 存款数是存单的内容。 对于一个内存单元来说,单元的地址即为指针,其中存放的数据才是该单元的内容。 在C语言中,允许用一个变量来存放指针,这种变量称为 指针变量 。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。 图中,设有字符变量C,其内容为“K”(ASCII码为十进制数 75),C占用了011A号单元(地址用十六进数表示)。设有指针变量P,内容为011A,这种情况我们称为 P指向变量C ,或说 P是指向变量C的指针 。 严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针

C语言文件读写命令

折月煮酒 提交于 2020-03-22 03:11:10
C语言把磁盘文件看成是字符(或字节)的序列,按照存储信息的形式来说,文件主要是有文本文件和二进制文件。文本文件由一个个字符组成,每个字节存放一个ASCII码制,代表一个字符。二进制文件把内存中的数据按其在内存中的存储形式原样放入磁盘空间。 二进制文件以及文本文件都可以看做是“数据流”。 流文件的特点是,处理时不需考虑文件中的数据的性质、类型和存放格式。访问时只是以字节为单位对数据进行存取,没有记录的概念,而将对数据结构的分析、处理等工作都交给后续程序区处理。系统会自动为这在使用的每个文件开辟一个缓存区,从内存向磁盘输出数据必须先送到内存中的缓存区,装满缓存后才一起送到磁盘。 一、文件的打开与关闭 文件在进行读写操作之前要先打开,使用完毕要关闭。所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其它操作。关闭文件则断开指针与文件之间的联系,也就禁止再对该文件进行操作。 fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式); 其中: “文件指针名”必须是被说明为FILE 类型的指针变量; “文件名”是被打开文件的文件名; “使用文件方式”是指文件的类型和操作要求。 “文件名”是字符串常量或字符串数组。 使用文件的方式共有12种,下面给出了它们的符号和意义。 “r” 只读打开一个文本文件,只允许读数据 “w”

C语言博客作业05--指针

纵然是瞬间 提交于 2020-03-21 08:20:00
1.本章学习总结 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 老师这次没布置课堂派预先作业就直接开讲,感觉上课听的不是很懂。 1.2.2 代码累计 2.PTA总分 2.1PTA中函数题目集的排名得分 2.2 我的总分 125分 3.PTA实验作业 3.1 PTA题目1 字符串的冒泡排序 3.1.1 算法分析 输入n, k \n 定义二维数组a和临时数组temp for i=0 to n do gets(a[i]) end for for i=1 to k do for j=1 to <n do if a[j-1]>a[j] then temp=a[j] a[j]=a[j-1] a[j-1]=temp end if end for end for for i=0 to <n-1 do 输出a[i] 换行 end for 输出a[n-1] 3.1.2 代码截图 3.1.3 PTA提交列表及说明 Q1:temp=a[j]编译错误 A1:字符串复制要用strcpy,不能直接用等号。 Q2:输入数组时最后一个字符串无法输入 A2:输入时在scanf里加一个回车,不然gets会得到一个回车,转为\0存入第一个字符串中。 来源: https://www.cnblogs.com/p123/p/10125206.html

指针函数/函数指针/指针数组/数组指针 区别

∥☆過路亽.° 提交于 2020-03-20 04:32:30
今天又遇到了指针数组,理解通道数据搞了半天。。。 bool LocalFileSaver::SaveADCData(Cash *data, LPCTSTR folder) { if (_tcscmp(folder, _T("")) == 0) { return false; } TCHAR path[MAX_PATH] = { 0 }; TCHAR fileName[128] = { 0 }; char sn[24] = { 0 }; strcpy(sn, data->GetSN()); if (sn[0] == '\0') { sprintf(sn, "0"); } wsprintf(fileName, _T("%04d%02d%02d_%02d%02d%02d_%03d_Err%03d_LastErr0x0_Den%d_Dir%d_Ver%02d_SN%s_adc.raw"), runCashStartTime.wYear, runCashStartTime.wMonth, runCashStartTime.wDay, runCashStartTime.wHour, runCashStartTime.wMinute, runCashStartTime.wSecond, data->Id(), data->GetError(), data->GetDenomination(),