C++学习之this指针】的更多相关文章

 C++学习之函数指针          和数据项类似,函数也有地址,函数的地址是存储在机器语言代码的内存的开始地址.通常,这些地址对用户而言,不重要也没什么用处,但对程序而言,它却很有用. 一.函数地址     函数地址的获取很容易:只要使用函数名即可.也就是说,如果think()是一个函数,那么他的函数名think就是该函数的地址,要将函数作为参数进行传递,必须传递函数名字,一定要区分传递的是函数的地址还是函数的返回值:如下面所示:        prosess(think):传递的是thi…
C++学习之this指针 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果.this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数.也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行.例如,调用date.SetMonth(9) <===> SetMonth(&date, 9),this帮助完…
<学习使用C指针(影印版)(英文本)>作者通过<学习使用C指针(影印版)(英文本)>中的内存模型为你展示了如何在数组.字符串.结构和函数中使用指针.虽然难以掌握,但是指针为C语言提供了灵活性和强大能力,不过很少有资料来讲述这种数据类型.无论你是初学者还是有经验的C或者C++编程人员和开发者,这本详尽的书籍都有着你所需要的知识. 下载地址:点我 编辑推荐 通过对C指针和内存管理的扎实理解来提高你的编程技能.在<学习使用C指针(影印版)>这本贴合实际的书籍里,你将了解到指针…
前面已经学习过auto_ptr,这里补充另外一种智能指针,比auto_ptr要更强力更通用的shared_ptr. shared_ptr 简介及使用选择  几乎所有的程序都需要某种形式的引用计数智能指针,这种指针让我们不再需要为两个对象或更多对象共享的对象的生命周期而编写复杂的逻辑(写起来有点绕口),当被共享的对象引用计数降为0时,被共享对象被自动析构. 引用计数指针分为插入式(instrusive)和非插入式(non-instrusive)两种.前者要求它所管理的类提供明确的函数或数据成员用于…
C语言中,最灵活但又容易出错的莫过于指针了.而指针数组,是在C中很常见的一个应用.指针数组的意思是说,这个数组存储的所有对象都为指针.除了存储对象为指针,即一个地址外,其它操作和普通数组完全一样. #include <stdion.h> int main() { int i; char *name[] = {"BASIC", "FORTRAN", "C++", "Pascal", "COBOL"…
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制). C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制. 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样.之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中…
曾经在书上看到函数指针相关的都没怎么重视.可是近期在实际的工作中却派上了用场.所以认真地学习了一遍. 函数指针的申明 申明一个函数指针非常easy,就是将函数申明中的函数名替换为一个指针就可以: C/C++ int test(int para1, double *para2); // 函数申明 int (*pf)(int para1, double *para2); // 函数指针申明 NOTE: 必须在申明中用括号将*pf括起来,由于括号的优先级比*运算符高.因此: C/C++ int (*p…
表指针实现.第二种方法是使用访问列表,模拟指针. 在我的理解中学习,它是创建一个节点数组,模拟存储装置,然后从中分配内存和释放内存. 但实际的内存没有被释放~ 下面的代码直接附着: // // main.cpp // CursorList // // Created by Alps on 14-7-27. // Copyright (c) 2014年 chen. All rights reserved. // #include <iostream> #define CursorSpace 10…
问题:当在对象的外部访问该对象的公有成员时,必须指明是哪一个对象.但是当我们用对象的成员函数来访问本对象的成员时,在成员函数中只要给出成员名就可以实现对该对象成员的访问.再进一步可用同一个类创建很多个对象,但它们共用同一份成员函数的拷贝.既然是同一份拷贝,那么成员函数又怎么知道是取哪一个对象的成员数据呢? 其实,当调用一个成员函数时,系统自动产生一个隐藏的指针,这个指针称为this指针,始终指向产生这个调用的对象,并将该指针作为一个参数自动传递给该成员函数.这就是说,成员操作符总是要使用的,只是…
1.指针优势,当数据量比较大时,通过指针直接访问数据量所在内存.处理更 加复杂的数据结构.例如:链表.二叉树.图等.2.指针本质是一种表示内存地址的数据类型,它和整型int和浮点数float一样 只是指针表示是内存地址.3.c++中两种途径可以访问内存. i:通过变量名间接访问.为了保存数据,通常先定义保存数据的变量,在 通过变量名间接访问在内存中的数据,进行读写. ii:另一种就是直接通过内存地址,也就是通过指针来访问内存中的数据.4.语法格式:数据类型* 变量名; 其中,“数据类型”表示指针…
在C语言中,函数名也是指针变量,比如创建了一个add(int n,int m)的函数的同时也创建了一个名为add的指针变量,因此我们可以把函数指针当作一种类型为它赋值.当作参数传递等操作 C语言创建函数指针的公式: 返回类型 (*指针变量)(参数类型) #include <stdio.h> int add(int n,int m){ return n+m; } int sub(int n,int m){ return n-m; } int main(){ ; ; int (*calculate…
在C中使用指针的原因 避免副本 在函数调用的时候,可以只传递数据的引用,而不用传递数据 数据共享 两段代码可以同时操作同一份数据,而不是两份独立的副本 使用指针读写数据 #include <stdio.h> int main(){ ; printf("x lives at %p\n",&x);//%p格式符将地址以16进制的格式输出 int* address_of_x=&x;//用指针变量保存x的地址 int value=*address_of_x;//通过…
一.指针: (1)如果对指针进行解引用操作 赋值,改变的是指针所指向对象的值:(2)如果不对指针进行解引用操作 赋值,则改变的是指针本身的值:(3)const指针本身的值不能修改,但是const指针所指向对象的值能不能修改取决于其所指向对象是否为const类型. 例如: 代码片段1: string s1("some value"); string *sp1 = &s1;//此时s1的值为“some value”,指针sp1指向s1 string s2("another…
智能指针是为了便于管理动态内存,能够自动管理释放所指向的对象. 智能指针共有三种:1.shared_ptr允许多个指针指向同一个对象:2.unique_ptr独占所指向的对象:3.weak_ptr是一个伴随类,它是一种弱引用,指向shared_ptr所管理的对象.这三种类型都定义在memory头文件中. 下面是一个在网上看到的智能指针的实现原理代码: class U_Ptr { friend class HasPtr; int *ip; size_t use; U_Ptr(int *p) : i…
this 是C++中的一个关键字,也是一个常量指针,指向当前对象(具体说是当前对象的首地址).通过 this,可以访问当前对象的成员变量和成员函数. 所谓当前对象,就是正在使用的对象,例如对于stu.say();,stu 就是当前对象,系统正在访问 stu 的成员函数 say(). 假设 this 指向 stu 对象,那么下面的语句中,this 就和 pStu 的值相同: Student stu; //通过Student类来创建对象 Student *pStu = &stu; 通过 this 来…
如果*p被()包住,说明指针变量p将来指向的是函数 //声明一个指针变量 //int (*p)(int, int) = sum; int (*p)(int, int); p = sum; // 如果*p被()包住,说明指针变量p将来指向的是函数 // 最左边的void说明p指向的函数没有返回值 // 最右边的()说明p指向的函数没有形参 void (*p)(); // 函数名test就是test函数的地址 // 将test函数的地址赋值给了指针变量p // 指针变量p成功指向了test函数 p…
简介 weak_ptr是shared_ptr的观察者,它不会干扰shared_ptr所共享对象的所有权,当一个weak_ptr所观察的shared_ptr要释放它的资源时,它会把相关的weak_ptr的指针设置为空,防止weak_ptr持有悬空的指针.为什么需要weak_ptr,很多情况下需要旁观或者使用一个共享资源,但不接受所有权,如为了防止递归的依赖关系,你就要旁观一个资源而不能拥有所有权,或者为了避免悬空指针(悬空指针和野指针的概念经常不太区分,都指那些指向已释放的或者访问受限制的内存的指…
指针与数组 ,,,,}; int *p; p = a; printf("*a = %d\n",*a); printf("*p = %d\n",*p); printf(]); printf(]); 数组名就是数组的首地址.以上输出结果都一样.数组名基本上和指针等价.但a是常量,不可以进行a++或者a+=1等操作,而指针p则可以. 指针数组和数组指针 数据类型 *变量名[] //首先它是一个数组,数组的元素是一个指针,也就是说每个元素存储的内容是一个地址 ]; 数据类型…
Const指的是一个编译时的常量. keywordconst使得代码能够确定一个变量能否够被改动. 使用了const后,能够防止对变量或者指针的改动:更重要的是,const的引用能够防止对所引用的对象的改动. 一般来说,在C语言中,对于一些常量的定义,我习惯性的使用define,而在C++中则最好改为使用const. 对于嵌入式程序而言,const的使用则是相当的微妙的,被const修饰后,其变量是存放在ROM中的,这一点非常重要. 关于Const的指针的使用,文字讲解没有意义,直接參见以下的代…
============================================================================= 指针变量之间赋值是需要兼容的. 例如:int *a = int的地址char *b= char的地址--------------------------------------void类型的指针可以做任意类型地址的赋值操作.例如:void *p = int地址可以p = char地址也还可以 但void类型的指针不能做指针运算.例如:p++;…
1. 几种智能指针 1. auto_ptr: c++11中推荐不使用他 2. shared_ptr: 每添加一次引用 就+1,减少一次引用,就-1:做到指针进行共享 3. unique_ptr: 一个指针同时只能有一个使用者使用 4. weaked_ptr: 与shared_ptr搭配使用 1.1 shared_ptr 参考:https://zh.cppreference.com/w/cpp/memory/shared_ptr std::shared_ptr 是通过指针保持对象共享所有权的智能指…
Objective-C 指针 每一个变量是一个内存位置和每一个存储单元都有其定义的地址,可以使用符号(&)的运算符,它表示内存中的地址访问. a. 我们定义一个指针变量 b. 分配一个指针变量的地址 c. 最后访问提供的地址指针变量的值.这是通过使用一元运算符*返回值的变量,其操作数位于指定的地址. 实例: #import <Foundation/Foundation.h> int main () { ; /* actual variable declaration */ int *i…
语言指针 定义及使用 变量是一种使用方便的占位符,用于引用计算机内存地址.取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址. 一个指针变量指向了一个值的内存地址.类似于变量和常量,在使用指针前你需要声明指针. var var_name *var-type var-type 为指针类型,var_name 为指针变量名,* 号用于指定变量是作为一个指针. 示例 func testPointer() { var pi *int var a = 20 pi = &a fmt.Print…
C 语言中的数组有自己特定的类型,数组的类型由元素类型和数组大小共同决定.(如 int array[5]类型为 int[5]) 1.定义数组类型 C 语言中通过 typedef 为数组类型重命名:typedef type(name)[size]; (1)数组类型:如 typedef int (AINT5)[5]; typedef float (AFLOAT10)[10]; (2)数组定义:AINT5 iArray; AFLOAT10 fArray; 2.数组指针 (1)数组指针用于指向一个数组…
C语言 指针 简单使用如下: int *p;//定义 int a = 10; p = &a;//赋值 int * b = &a;//定义并赋值 定义格式:类型 *指针变量名: 注意事项: 1.一定要先定义后赋值,用完记得清空. 2.%p输出指针里面存储的地址值. 3.清空指针可以用 p = 0:或p = NULL: 代码示例 #include <stdio.h> //结构体指针测试 struct pStruct { int a; float b; double d; }; //…
说明:函数指针,顾名思义就是指向函数的指针.C/C++中函数名的本质其实就是一段代码段空间的首地址. 1.定义 如下的 pf 就是一个函数指针,指向所有返回类型为 int,并带有两个 const int 参数的函数.需要注意的是 *pf 两边的括号不能少,否则下面定义就变成声明一个函数 pf,其返回类型为 int *, 带有两个 const int 参数. int (*pf)(const int, const int); 2.取别名 如果每次都像上面那样来声明一个函数指针,那样就显得太复杂了,我…
1.认识指针 #include <stdio.h> //基本数据类型作为函数參数传递是值传递 //void moveFront(int x ,int y) //{ // x = x + 2; //} void test() { // 确定当前坐标 int x = 20; int y = 150; printf("%p\n",&x); printf("%lu\n",&x); *((int *)(0x7fff5fbff76c)) = 22;…
说明:int (*p)[4] 和 int *p[4](数组指针和指针数组),如果你是一个初学者,也许当你看到这两个名词的时候,已经懵了.其实,只要你理解了其中的含义.这两个名词对你来说会相当简单并且很有趣,下面,我们就来深入探讨一下究竟什么是数组指针,什么是指针数组. 一.指针数组 1.前面我们已经学过数组了,比如说要创建一个一维整型数组,该怎么创建呢?应该是这样的:int arr[N];其中,arr是数组名,即变量名,N是你所创建的这个数组中的元素个数,而前面的int则是这些元素的类型.所以其…
1.引用的本质struct typeA{ int &a;}struct typeB{ int *a;}int main(void){ cout<<sizeof(struct typeA)<<endl;//输出4 cout<<sizeof(struct typeB)<<endl;//输出4 int a =10; int &re =a;//常量要初始化,引用也要初始化,引用可能是一个常量 //综上两点,引用可能是一个常指针; int *const…