叙述 对于读取本地文件,很多时候需要预先知道本地文件的大小在进行读取。网上给出的方案是移动文件指针,计算文件头和文件尾的偏移,计算出文件的大小。...但是我总觉得这样做可能会与读取文件一样消耗性能,为了解决这个问题,我写了如下例子验证了一下。...char *buff = new char[len]; ifs.read(buff, len); delete[]buff; timer.time_out(); cout << "读取文件耗时...:" << timer.time_out() << "秒" << endl; return 1; } 如上所示,我写了一个计时器,分别统计偏移文件指针计算文件长度与读取整个文件的耗时,运行结果如下:...结论 可以看到,偏移文件指针带来的时间消耗非常小,几乎可以忽略不记。通过这个方法,不仅可以很快计算文件长度,还可以根据需要读取文件的特定位置,从而达到节省性能的目的。
在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。...友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针。...下面的实例有助于更好地理解 this 指针的概念:实例#include using namespace std; class Box{ public: // 构造函数定义
:this指针,通过this指针来访问自己的地址。...注意: this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。...this指针的类型取决于使用this指针的成员函数类型以及对象类型, 一、this指针的概念 定义 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。...this指针的创建 this指针在成员函数的开始执行前构造的,在成员的执行结束后清除。 this指针只有在成员函数中才有定义。 创建一个对象后,不能通过对象使用this指针。...也无法知道一个对象的this指针的位置(只有在成员函数里才有this指针的位置)。当然,在成员函数里,你是可以知道this指针的位置的(可以&this获得),也可以直接使用的。
指针常量与常量指针这个概念是一样的,英文里没有pointer const这个词,只有pointer to const和const pointer这两个词。.../合法 p = &b;//不合法 以上就是所谓的指针常量与常量指针所包含的概念,在这里标个号: 1,2暂时称为第一类,3暂时称为第二类,那么第一类和第二类到底哪个叫做指针常量,那个叫做常量指针呢?...百度百科认为第一类应该叫做常量指针,第二类叫做指针常量 ? ?...上面说的情况,对于指针的修饰都只用了一个const关键字,还有两个const一起用的时候,此时的结果就是指针不能修改指向的数据,指针不能指向别的地方: int a = 5; int b = 6; const...,这样一来数据自身不能改变,指针不能该数据,指针不能指向别处。
说明 文件指针式指向当前字节的位置,当mode=r时,指针起始在0;mode=a时,指针起始位置在EOF。...tell() tell()显示当前指针位置 In [47]: f = open('test')...Out[49]: 0 seek() seek()移动文件指针的位置...Out[64]: 'addbsa 12323 \\nwqeqweqw\n' In [65]: f.tell() # 获取当前文件指针位置...Out[65]: 24 In [67]: f.seek(0) # 设置文件指针为
c++指针使用注意点 避免野指针的产生 “野指针”的成因主要有: 1)指针变量没有被初始化。...任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。...char *p; //此时p为野指针 2)指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针. char *p=new char[10]; //指向堆中分配的内存首地址...e.指针做形参 即所谓的地址传递,我们都知道地址传递的方式,形参的改变会导致实参的改变,但要注意的是,这里的改变是指指针所指内容的改变,而不是指针值的改变。...1.改变指针内容: void swap(int *a,int *b) //交换的是*a,*b,即指针的内容,而不是指针a,b { int t; t=*a; *a=*b; *b
一 简单示例 int a; const int c_a = 1; int* p; p = &a; p = &c_a; // error 即非const指针不能指向const数据(数据为非指针类型)。...int a; const int c_a = 1; const int* p1; p1 = &a; p1 = &c_a; 即const指针既可以指向const数据又可以指向非const数据(数据为非指针类型...二 综上 如果数据类型本身并不是指针,则可以将const数据或非const数据的地址赋给指向const的指针,但只能将非const数据的地址赋给非const指针。...二级间接关系中,需要注意const指针的赋值。...三 参考 C++ primer plus 第6版 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/157475.html原文链接:https://javaforall.cn
展示一下使用指针的指针和指针的引用修改传递给方法的指针,以便更好的使用它。...(这里说的指针的指针不是一个二维数组) 为什么需要使用它们 当我们把一个指针做为参数传一个方法时,其实是把指针的复本传递给了方法,也可以说传递指针是指针的值传递。...如果我们在方法内部修改指针会出现问题,在方法里做修改只是修改的指针的copy而不是指针本身,原来的指针还保留着原来 的值。...输出的是两个2 使用指针的指针 展示一下使用指针的指针做为参数 void func(int **p) { *p = &m_value; // 也可以根据你的需求分配内存 *p...我们看一下 func(int **p)这个方法 p: 是一个指针的指针,在这里我们不会去对它做修改,否则会丢失这个指针指向的指针地址 *p: 是被指向的指针,是一个地址。
类的大小 有个问题是刚开始学习C++的人都想知道的,那就是C++的类对象的大小是多少?可能的猜测是它所有数据成员的大小加上所有函数指针的大小,这样就是类的大小。...那么C++类的函数成员是怎么确定是哪一个对象在调用它? 为了解决这个问题,C++设计了一个叫做this指针的东西。它能帮助成员函数知道谁在调用它。...this指针 this指针存放着当前对象的地址,也就是this指针指向当前对象。可以使用它来返回对象本身。 this指针不是对象的成员。...this指针只能在成员函数内部使用,类外以及成员函数外部都不能使用。 this指针是普通成员函数的一个隐藏参数。 注意:类的静态成员函数不具备this指针。这样就限制了静态成员函数的功能。...this指针的另外一个附加功能就是当类数据成员和类的函数参数名称一致的时候,使用this指针可以避免混淆。就像下面代码中的一样。
函数指针基础: 1. 获取函数的地址 2. 声明一个函数指针 3.使用函数指针来调用函数 获取函数指针: 函数的地址就是函数名,要将函数作为参数进行传递,必须传递函数名。...声明函数指针 声明指针时,必须指定指针指向的数据类型,同样,声明指向函数的指针时,必须指定指针指向的函数类型,这意味着声明应当指定函数的返回类型以及函数的参数列表。...例如: double cal(int); // prototype double (*pf)(int); // 指针pf指向的函数, 输入参数为int,返回值为double pf = cal;...// 指针赋值 如果将指针作为函数的参数传递: void estimate(int lines, double (*pf)(int)); // 函数指针作为参数传递 使用指针调用函数 double...函数指针的使用: #include #include #include using namespace std; double
一、指针的基本概念 指针的作用:可以通过指针间接访问内存。 内存编号是从0开始记录的,一般用十六进制数字表示。 可以利用指针变量保存地址。...四、空指针和野指针 1.空指针:指针变量指向内存中编号为0的空间。 用途:初始化指针变量。 注意:空指针指向的内存是不能够访问的。...; 五、const修饰指针 const修饰的指针有三种情况: const修饰指针--常量指针 const修饰常量--指针常量 const修饰指针,又修饰常量 int a = 10; int...b = 10; //常量指针,指针指向的值不可以改,指针的指向可以改 //即*p=20是非法的,p=&b是合法的 const int* p = &a; //指针常量,指针的指向不可以改...,指向数组的第一个元素,在数组中用下标访问元素的值时,相当于是将指针指向该元素的内存空间 //我的理解是c++会自己定位到那,并取得值 for (int i = length - 1;
this指针指向被调用的成员函数所属的对象。 this指针是隐含每一个非静态成员函数内的一种指针。 this指针不需要定义,直接使用即可。
C++的this指针 当你进入一个房子后, 你可以看见桌子、椅子、地板等, 但是房子你是看不到全貌了。 对于一个类的实例来说, 你可以看到它的成员函数、成员变量, 但是实例本身呢?...this是一个指针,它时时刻刻指向你这个实例本身。 C++在初始化对象时,每个对象中的数据成员都会得到系统分配的自己独立的存储空间。...那么我们就会使用this指针。 this指针的特性: 1、this指针的类型const(类名const),为右值。...4、this指针是类成员函数的第一个默认隐含参数,编译器自动维护传递,类编写者不能显式传递。 5、只有在类的非静态成员函数中才可以使用this指针, 其它任何函数都不可以。...6、this指针时刻指向对象 。 7、当this指针指向空时,是不会指向对象的。
C++指针运算 指针变量加或减 一个整数 p++; p--; p+i; p-i; C++规定,一个指针变量加或减一个整数是将该指针变量的原值和它指向的变量所占用的内存单元字节数相加或相减。...C++指针变量赋值 将一个变量地址赋给一个指针变量。...实际上系统已先定义了NULL: #define NULL 0 在iostream头文件中就包括了以上的NULL定义, NULL是一个符号常量。...C++两个指针变量可以相减 如果两个指针变量指向同一个数组的元素,则两个指针变量值之差是两个指针之间的元素个数。...C++使用指针的优缺点 指针是C语言和C++的重要组成部分,使用指针的优点是: 提高程序效率。
要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。...以后,每遇到一个指针,都应该问问:这个指针的类型是什么?指针指向的类型是什么?该指针指向了哪里? 指针本身所占据的内存区 指针本身占了多大的内存?你只要用函数sizeof(指针的类型)测一下就知道了。...:指针的类型,指针所指向的类型,指针指向的内存区,指针自身占据的内存。...数组和指针的关系 如果对声明数组的语句不太明白的话,请参阅我前段时间贴出的文章>。数组的数组名其实可以看作一个指针。...所有的C/C++编译器在排列数组的单元时,总是把各个数组单元存放在连续的存储区里,单元和单元之间没有空隙。
本文链接:https://blog.csdn.net/ZY_FlyWay/article/details/102490751 最近在blink看到很多刚学C++的学弟学妹,手有点痒,毕业快5年了,C...写这篇文章回顾下C++我在大学学习时候的误区,希望可以让和我一样的同学少走点弯路。 指针 这是我大学的噩梦,好几个问题一直在脑子里转来转去,虽然老师讲了指针就是一块内存,它可以指向另一个内存。...2、 &和指针又是什么关系 3、int * array = a[n] 数组和指针啥关系呢? 4、 函数指针和指针函数 下面一个一个解决这些问题。 为什么要用指针?...问题二:& 和 指针 是什么关系 ---- & 取地址、引用的意思。 从上个例子可知,&a为a的内存地址。 它和指针没有关系,为什么以前有误区,因为弄不清指针地址,和指针指向地址的概念。...问题四: 函数指针和指针函数 ---- 纸老虎!!! 别被他们俩的名字给吓住了。相当于a++ , ++a。 指针函数:是一个函数,只不过返回一个指针。 函数指针:就是一个指针。
函数指针 可以使用算法的地址传递给方法,传递之前要先完成以下工作 1.获取函数的地址 2.声明一个函数指针 3.使用函数指针来调用函数 1.获取函数的地址,只要使用函数名就可以 Fun2(Fun1);...Fun2就可以在程序内部调用Fun1()函数 2.声明函数指针 声明时一定要指定指针指向的类型。...同样,声明指向函数的指针时,必须指定指针指向的函数类型。...如一个函数的原型为 int Fun1(int a); 指针类型声明: int (*pt)(int);//只是将Fun1换成了 *pt *pt 是函数, pt是函数的指针 //声明后赋值 pt = Fun1...; 3.使用指针来调用函数 上面的声明说过 *pt和函数名是一样的,使用*pt和就可以调用 方法 int Fun1(int a); int (*pt)(int); pt = Fun1; int _va
指针:是说指针名表示的是地址。...是一个变量,存储的是值的地址,而不是值本身 *运算符被称为间接值或解除引用运算符也可以叫做取地址符 声明一个指针 int * p_data; * p_data的类型为int 由于*运算符被用于指针...,因此p_data变量本身必须是指针。 ...我们说p_data指向int类型,我们还说P_data的类型是指向int的指针,或int* 可以这样说p_data是指针(地 址),而*p_data是int,而不是指针 初始化指针 int value=...,可以把指针初始化等于0的指针指针为nullptr不指向任何对象 int* myValue(nullptr); nullptr可以隐式转换为bool类型 可以这么判断 if(!
C++指针变量的定义 C++规定所有变量在使用前必须先定义,即指定其类型,在编译时按变量类型分配存储空间,对指针 变量必须将它定义为指针类型。...即*不是指针变量名的一部分,在定义变量时在变量名前加一个*表示该变量是指针变量。 在C++中怎样使一个指针变量指向另一个变量呢?...只需要把被指向的变量的地址赋给指针变量即可: point_num1=&i; 在C++中,一般编译系统为每一个指针变量分配4个字节的存储单元,用来存放变量的地址, 在定义指针变量时要注意: 不能用一个整数给一个指针变量赋初值...在定义指针变量时必须指定基类型。 经典案例:C++定义指针变量。...C++定义指针变量 | 使用指针变量 更多案例可以go公众号:C语言入门到精通
有人总是以为所谓的文件指针就是一个指向文件的指针,其实文件指针是一种指向类型为FILE结构体的指针,只不过这个结构体内部包含了代表文件的描述符而已。...拓展: 文件指针是这么获取的: FILE *fp = fopen("example.txt", "r"); 其中,FILE结构体如下所示: ?...在上述结构体中,有个叫_fileno的核心成员,该成员就是由open()获得的文件描述符,可见标准IO函数fopen()本质上也是对系统IO的封装,它们的关系如下图所示: ?
领取专属 10元无门槛券
手把手带您无忧上云