指针变量

面试题之JVM内存区域

余生颓废 提交于 2020-03-09 05:15:40
1、Java内存区域(运行时数据区域):   jdk1.8之前:虚拟机运行内存分栈、堆和方法区这几种。 栈:虚拟机栈、本地方法栈、程序计数器。(线程私有,每个线程都拥有各自的) 程序计数器:一块比较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。主要有2个作用: 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。 在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪里了。 注意:唯一一个不会出现OutOfMemoryError的内存区域,它的生命周期随着线程的创建而创建,随着线程的结束而死亡。 Java虚拟机栈:生命周期与线程相同(随着线程创建而创建,随着线程死亡而死亡),描述的是Java方法执行的内存模型,每次方法调用的数据都是通过栈传递的。Java内存大概就是堆内存和栈内存,栈是虚拟机栈或是虚拟机栈中局部变量表部分。(实际上,Java虚拟机栈是由一个个栈帧组成,每个栈帧中都拥有:局部变量表、操作数、动态链接、方法出口信息) 局部变量表主要存放了编译器可知的各种数据类型 (boolean、byte、char、short、int、float、long、double)、 对象引用 (reference类型,不同于对象本身,可能是指向一个代表对象起始地址的引用指针

c++ primer 第二章要点

爱⌒轻易说出口 提交于 2020-03-08 22:15:54
c++ primer 第二章要点 2.1 基本内置类型 2.1.1 算数类型 c++定义了包含 算数类型 和 空类型 的基本数据类型 算数类型包含:1.字符;2.整形数;3.布尔值;4.浮点数 空类型在函数不返回任何值时使用空类型作为返回类型 算数类型尺寸 char的大小和一个机器字节一样,一个字节8比特 使用int执行整数运算,超过int范围使用long long 执行浮点数选用double,float单精度精度不够 2.1.2 类型转换 带符号数在表达式中同时出现无符号数时会自动的转化为无符号数,影响结果正确性 double pi = 3, pi = 3.0 2.1.3 字面值常量 整形和浮点型字面值,字符和字符串字面值 单括号char型,双括号string型 编译器在每个字符串的结尾处加一个空字符‘\0’,所以字符串的实际长度比字面值多1 通过添加前缀或后缀可以改变字面值类型 布尔值字面值(true,false)和指针字面值(nullptr) 2.2 变量 2.2.1 变量定义 int sum = 0, value, units_sold = 0 定义于函数体内部的变量将不被初始化 2.2.2 变量声明和定义的关系 声明规定了变量的类型和名字,定义申请了存储空间。 如果想要声明变量,需要在变量名前加 extern 并且不进行初始化 如果想在多个文件中使用同一个变量

第二次作业

可紊 提交于 2020-03-08 22:13:15
一、指针与数组和指针运算的学习 1.观看视频:1.1.4指针和数组、1.2.1指针运算 2.笔记: 3代码 4遇到的问题 const的指针不能被赋值是因为什么 数组变量是const指针,所以不能被赋值 const指针的准确提法应该是指向const数据的指针,即它所指向的数据不能被修改 请教讨论明白了 NULL和0的值是一样的,都是0,不过它们的表现形式不一样,当要将一个指针赋值为空指针的时候,都应该将它赋为NULL,而不是0 计算p+1和p++结果是一样的,但是计算过程不一样,p++ 落后一个时步,也就是做完一次循环体后它才增加1;p=p+1,在循环体内部,即时增1 来源: https://www.cnblogs.com/a1322264513/p/12444606.html

指针的算术运算

最后都变了- 提交于 2020-03-08 21:15:00
C++ 指针的算术运算 C++ 指针 C++ 指针 指针是一个用数值表示的地址。因此,您可以对指针执行算术运算。可以对指针进行四种算术运算:++、--、+、-。 假设 ptr 是一个指向地址 1000 的整型指针,是一个 32 位的整数,让我们对该指针执行下列的算术运算: ptr++ 在执行完上述的运算之后,ptr 将指向位置 1004,因为 ptr 每增加一次,它都将指向下一个整数位置,即当前位置往后移 4 个字节。这个运算会在不影响内存位置中实际值的情况下,移动指针到下一个内存位置。如果 ptr 指向一个地址为 1000 的字符,上面的运算会导致指针指向位置 1001,因为下一个字符位置是在 1001。 递增一个指针 我们喜欢在程序中使用指针代替数组,因为变量指针可以递增,而数组不能递增,因为数组是一个常量指针。下面的程序递增变量指针,以便顺序访问数组中的每一个元素: #include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // 指针中的数组地址 ptr = var; for (int i = 0; i < MAX; i++) { cout << "Address of var[" << i << "] =

数组与指针

倾然丶 夕夏残阳落幕 提交于 2020-03-08 20:07:06
1、数组元素的指针    一 个变量有地址,一个数组包含若干元素,每个数组元紫都在内存中占用存储单元,它们都有相应的地址。指针变量既然可以指向变量,当然也可以指向数组元素(把某元素的地址放到一个指针变量中)。所谓数组元索的指针就是数组元素的地址。引用数组元素可以用下标法(如a[3]),也可以用指针法,即通过指向数组元素的指针找到所需的元素。使用指针法能使目标程序质量高(占内存少,运行速度快)。 /*定义一个指向数组元素的指针变量的方法*/ int a[10]; //定义a为包含10个整型数据的数组 int *p; //定义p为指向整型变量的指针变量 /*应当注意:如果数组为int型,则指针变量的基类型也为int型,下面对该指针变量赋值*/ p=&a[0]; //把a[0]元素的地址赋给指针变量p /*C语言规定,数组名代表数组中首元素的地址*/ p=&a[0] <=> p=a //等价关系 /*注意数组名a不代表整个数组,上述p=a的作用是把a数组元素的首地址赋给指针变量p,而不是将数组a各元素的值赋给p*/ 2、通过指针引用数组元素    假设p已定义为一个指向整型数据的指针变量,并已给它赋了一个整型数组元素的地址,使它指向某一个数组元素。如果有赋值语句:*p=1; 表示将1赋给ρ当前所指向的数组元素。按C语言的规定:如果指针变量p已指向数组中的一个元素,则p

指针与字符串实例练习

老子叫甜甜 提交于 2020-03-08 20:03:22
在C语言中,字符串是存放在字符数组中的,字符串的引用如下: char string[] ="I love China!";//定义字符数组string printf("%s\n",string);//输出整个字符串 printf("%c\n",string[7]);//输出第七个元素 该字符串长度是14,最后一个字节存放字符串结束符'\0'。 例1:通过字符指针变量输出一个字符串。 1 int main() 2 { 3 char *string="I love China!"; 4 printf("%s\n",string); 5 return 0; 6 } 定义一个char*变量,即字符型指针变量string,用字符串常量"I love China!"初始化,把字符串的第一个元素的地址赋给指针变量string,使string指向字符串的第一个字符。 %s使输出字符串格式符,系统会输出string指向的第一个字符,然后自动使string+1,指向下一个字符,直到'\0'为止。 例2:将字符串a复制为字符串b,然后输出字符串b。 1 int main() 2 { 3 char a[]="I am student.",b[20],*p1,*p2; 4 p1=a;p2=b;//指向数组中第一个元素 5 for(;*p1!='\0';p1++,p2++) 6 *p2=*p1; 7 *p2=

C语言指针

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

DS博客作业01-线性表

白昼怎懂夜的黑 提交于 2020-03-08 19:50:40
0.PTA得分截图 1.1 线性表学习总结 1.线性表的基本概念 线性表是一个具有n个相同特性的有限序列,所有元素都属于同一种数据类型。线性表的逻辑结构简单,便于实现和操作,运用范围广泛。按照存储方式可以分为:顺序表和链表。 2.顺序表 将数据依次存储在连续的整块物理空间中,各结点间的存储单元地址是连续的。 结构体定义 typedef struct node{ ElemType data[MAX]; int length;//保存线性表的长度,或者也可以定义int型变量last用于保存线性表中最后一个数据所在的位置下标。 }Node,*NodeList; 基本操作 顺序表的插入 :实质上就是移动数组的操作,可以从头开始遍历,找到插入的位置后,开始移动数组,或者从末尾开始边移动数组边比较,找到插入的位置后,直接插入; 伪代码: void InserList(NODE & list,int x) { 判断顺序表是否满了,如果满了就return for i=list.length to 0 //从末尾开始一个一个把数据右移,直到找到x的插入位置停止。 if x>list.data[i-1] //找到插入位置,退出循环; break; else list.data[i]=list.data[i-1];//数据进行右移; end if end for list.length++;/

数组与指针

有些话、适合烂在心里 提交于 2020-03-08 19:49:17
一、指针与数组和指针运算的学习 1.观看视频:1.1.4指针和数组、1.2.1指针运算 2.笔记: 3.代码列表 4.遇到的问题 (1)问题:int i; int *p=&i; void *q=(void*)p; 在1.2.1视频中在讲指针类型转换时表示:“上式没有改变p所指的变量的类型而是让后人用不同的眼光通过p看它指向的变量。”不能理解“后人用不同的眼光通过p看它指向的变量”中的不同的眼光。 解决:百度。void *q=(void*)p;将指针p的内容赋值给空类型指针q,并没有改变i或指针p的类型,但在用q读取 int i时,将以指针q的void类型读取i。 (2)问题:在1.1.4代码: #include<stdio.h> void minmax(int a[],int len,int *max,int *min); int main(void) { int a[]={1,2,3,4,5,6,7,8,9}; int min,max; minmax(a,sizeof(a)/sizeof(a[0]),&min,&max); printf("main sizeof(a)=%lu\n",sizeof(a)); printf("min=%d,max=%d\n",min,max); int *p=&min; printf("*p=%d\n",*p); printf("p[0]=%d\n"