指针变量

指针和引用的区别

北慕城南 提交于 2020-01-14 06:27:12
引自 http://www.cnblogs.com/jiu0821/p/4127382.html 1.指针与引用的区别: 指针是一块内存的地址值,而引用是一块内存的别名。 从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)。 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。 而在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。

指针与引用的区别

十年热恋 提交于 2020-01-14 06:24:59
* 指针是一个变量有单独的存储空间(引用是一个对象的别名,没有单独的存储空间,使用的是原对象) * 指针初四化后可以改变,可以用来指向其他的对象(引用初始化后不能改变,不能用来引用其他的对象) * 指针可以为空(引用不能为空) * 指针的长度为4个字节(引用的长度位引用对象的长度) 来源: https://www.cnblogs.com/smallredness/p/11063621.html

指针和引用的区别

微笑、不失礼 提交于 2020-01-14 06:23:03
1、指针是存放变量地址的一个变量,指向内存的一个存储单元,在逻辑上是独立的,可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。 引用是其所引用的变量的一个别名,与其所引用的变量实质上是同一个东西,在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)。 2、指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的);3 3、指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化; 4、指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了; 5、"sizeof引用"得到的是所指向的变量(对象)的大小,而"sizeof指针"得到的是指针本身的大小; 6、指针和引用的自增(++)运算意义不一样; 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。

C语言指针小应用

早过忘川 提交于 2020-01-14 02:44:45
C语言指针小应用:如何用指针实现多个变量值的交换? 方法一:不交换变量的值,交换两个指针变量的值。 # include "stdafx.h" int main ( int argc , char * argv [ ] ) { int a , b ; //定义两个整形变量 int * pointer_1 , * pointer_2 ; //定义两个指针变量 pointer_1 = & a ; pointer_2 = & b ; //将a和b的地址赋个指针变量 printf ( "please input the values of a and b.\n" ) ; scanf ( "%d%d" , & a , & b ) ; if ( a < b ) { pointer_2 = & a ; pointer_1 = & b ; } //a<b,则交换指针所指向的地址 printf ( "max=%d min=%d\n" , * pointer_1 , * pointer_2 ) ; return 0 ; } 方法二:交换指针变量所指变量的值 # include "stdafx.h" void swap ( int * x , int * y ) ; int main ( int argc , char * argv [ ] ) { int a , b ; int * pointer_1

指针学习

独自空忆成欢 提交于 2020-01-14 02:19:42
程序中定义的变量,在编译时,系统会给这个变量分配内存单元,根据数据类型,分配一定的长度空间。如Visual C++为整型变量分配4个字节,float分配4个字节,对char分配1个字节,内存区的每个字节有一个编号,这就是“地址”。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元,将地址形象的称为”指针”,即一个变量的地址称为该变量的” 指针 ” 。 指针变量 ,也是地址变量; 如: int i=3; / 定义整型变量并初始化 int *i_pointer; / 定义整型数据的指针变量 i_pointer=&i; / 将i 的地址存放到i_pointer中,比如变量i 所占用单元的起始地址为2000,那么i_pointer=2000 。 *i_pointer=3; 其中*i_pointer 表示指向的对象,指向就是通过地址来实现的。通过i_pointer=2000的地址指向该变量单元,即 i 的值为3.。 例中变量i 的指针为2000(地址),指针变量i_pointer 只是存放地址的变量,不能说i的指针变量是2000。 定义指针变量: 类型名 *指针变量名; 如:int *pointer_1; 对它 初始化 还可以写成int *pointer_1=&a ; 上面定义的指针变量前面的" * " 表示该变量的类型为指针类型,在定义指针变量时 必须指定基类型

第六周作业

别说谁变了你拦得住时间么 提交于 2020-01-14 01:53:41
这个作业属于那个课程 c语言程序设计 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class1-2018/homework/2889 我在这个课程的目标是 初步了解指针 这个作业在那个具体方面帮助我实现目标 指针的使用 参考文献 课本C语言程序设计 6-1 求两数平方根之和 (10 分) 函数fun的功能是:求两数平方根之和,作为函数值返回。例如:输入12和20,输出结果是:y = 7.936238。 函数接口定义: double fun (double a, double b); 其中 a和 b是用户传入的参数。函数求 a指针和b 指针所指的两个数的平方根之和,并返回和。 裁判测试程序样例: #include<stdio.h> #include <math.h> double fun (double *a, double *b); int main ( ) { double a, b, y; scanf ("%lf%lf", &a, &b ); y=fun(&a, &b); printf ("y=%.2f\n", y ); return 0; } /* 请在这里填写答案 */ 输入样例: 12 20 输出样例: y=7.94 (1)实验代码 #include<stdio.h>

【JVM】内存管理-HotSpot虚拟机

房东的猫 提交于 2020-01-13 22:09:35
HotSpot虚拟机在Java堆中对象分配。布局和访问的全过程。 对象的创建 在语言层面上,创建对象通常(例外:复制、反序列化)仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过程呢? 当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务实际上便等同于把一块确定大小的内存块从Java堆中划分出来。 如何划分空间 假设Java堆中内存是 绝对规整 的,所有被使用过的内存都被放在一边,空闲的内存被放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间方向挪动一段与对象大小相等的距离,这种分配方式称为**“指针碰撞” (Bump ThePointer)。但如果Java堆中的内存并 不是规整 的,已被使用的内存和空闲的内存相互交错在一起,那就没有办法简单地进行指针碰撞了,虚拟机就必须维护一个列表,记录上哪些内存块是可用的,在分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的记录

指针详解及常见应用

雨燕双飞 提交于 2020-01-13 17:35:39
指针详解及常见应用 先说下讲解这个专题的原由,这两天一个同事老是跟我抱怨,c的指针太恶心了,指针指来指去的都指懵逼了! 听了他的话,我深深感觉应该把指针好好讲讲。 开始前先大体说下什么是指针,这里说的肯定和大部分玩家说的不一样好好理解下 大部分玩家肯定会说怎么是指针,指针就是 int x=9;int* p=&x; 。但是我想说的是指针本质上就是变量,只不过这个变量比较特别,它存的是内存空间(系统的虚拟内存,不是硬件的物理内存)的地址,当我们去访问时就是去跳转到内存地址去读取存储空间存储的数据。ok!指针就是那么多东西,好了我讲完了! NO! NO! NO! 还有应用呢? 好的我们继续,其实指针大体在使用中可以做分类,我一般按2个角度分.。 本身的性质 :一级指针,二级指针,三级指针等等等等可以无限下去。有人说这个我最烦它了,一级二级的一看就乱,其实在使用中只需要搞清楚,对指针操作到底是操 作的是地址还是存储的实际的值 。这里一级指针我就不多说了一般不会有问题;二级指针例如如果我们创建一个函数,函数体中是malloc一个内存堆空间,malloc的返回值不是作为返回值返回,而是作为函数参数传递给调用者,那么一定需要使用二维指针,因为我们这里是要在实参的地址空间存malloc申请的堆空间的地址。废话不多说看代码: #include <iostream> using namespace

typedef与#define的区别与联系

牧云@^-^@ 提交于 2020-01-13 09:59:23
typedef和#define的用法与区别 一、typedef的用法 在C/C++ 语言 中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: typedef int INT; typedef int ARRAY[10]; typedef (int*) pINT; typedef可以 增强 程序的可读性,以及标识符的灵活性,但它也有“非直观性”等缺点。 二、#define的用法 #define为一宏定义语句,通常用它来定义常量(包括无参量与带参量),以及用来实现那些“表面似和善、背后一长串”的宏,它本身并不在编 译过程中进行,而是在这之前(预处理过程)就已经完成了,但也因此难以 发现 潜在的错误及其它代码维护问题,它的实例像: #define INT int #define TRUE 1 #define Add(a,b) ((a)+(b)); #define Loop_10 for (int i=0; i<10; i++) 在Scott Meyer的Effective C++一书的条款1中有关于#define语句弊端的分析,以及好的替代方法,大家可参看。 三、typedef与#define的区别 从以上的概念便也能基本清楚,typedef只是为了增加可读性而为标识符另起的新名称(仅仅只是个别名),而

c++注意点

穿精又带淫゛_ 提交于 2020-01-13 09:50:22
const常量 使用该修饰符定义常量,必须初始化 一旦定义任何地方没法改 如果定义的是一个整型常量,关键字 int 可以省略 const常量可以与指针一起使用,有 3 组合情况: 指向常量的指针:是指一个指向常量的指针变量 const char*p =“abcd”;,所以不能改变指针指向的字符,比如 p【3】=‘h’ 是错误的,因为它指向的事一个 字符串常量 ,所以不能更改内容,但可以改变该指针的所指方向:如 p=“kkvkvk”;那就是对的; 常指针:是一个指向固定的一个指针; char const *p=“45678”; 若这样子操作则是错的:p=“kkvkvk”;若是 p[3]='k’则对的,因为指向的地址没变; 指向常量的常指针:const char const*p=“46df”;这个就怎么不能改了; int const* a 相当于 const int *a 这是指向常量的指针 (可改变指针指向地址,不能改变指针指向的变量的内容) 不是 int *const a; 这是常指针;(不可以改变指针指向的变量,但可以改变该变量的内容) # include <iostream> using namespace std ; int main ( ) { const int a1 = 7 ; int const a2 = 8 ; int c1 = 9 ; int c2 = 10 ;