指针变量

C++总结(二)

ε祈祈猫儿з 提交于 2020-02-12 02:31:24
一、this指针 1、概念 :类非静态成员函数的第一个隐藏的参数,该参数使用指向调用当前函数的对象 2、特性 : this指针类型:T* const 普通类型成员函数:T* const 可以修改对象的内容,可以调用普通和const类型的成员函数 const类型成员函数:const T* const:this指向不能修改并且指向对象中的内容也不能修改,只能调用const类型的成员函数 this是非静态成员函数的第一个隐藏参数,隐藏:用户在编写函数时不用给出this的参数,该参数是编译器自己维护,调用该函数也不需要手动传递,this指针的传参也是编译器自己进行 this指针只存在于正在运行的成员函数中,this指针不会存在于对象中,不会影响类对象的大小 静态成员函数:没有this指针 this指针的传递:一般情况exc寄存器(this_call:调用约定),也可能通过参数压栈的方式进行传递:push 对象地址(比如:类中如果包含不定参数的成员函数) 3、this指针是否可以为NULL 如果成员函数是通过对象的方式进行调用,this指针一定不会为NULL: 如果成员函数是通过类类型的指针方式进行调用,this指针可能会为NULL: 4、this指针位置:栈 类的编译过程: 1、识别类名 2、识别类中的成员 3、识别类中的成员函数,并对成员函数进行改写 二、类中六个默认的成员函数 1

函数指针和回调函数

流过昼夜 提交于 2020-02-11 23:15:15
/* 指针函数 */ /* (__type__*) function(int, int)返回的是指针地址, (__type__) function(int, int)返回的是int型数据。 */ /* 函数指针 */ /* 函数指针有两个用途:调用函数和做函数的参数。 */ /* __type__ (*function)(int, int) */ /* 只是一个指针,变量指针是指向一个变量的地址, 结构体指针是指向一个结构体的首地址, 而函数指针是指向一个函数的地址, 它是一种类型,比int,char高级的类型。 */ /* 回调函数 */ int (*function)(int, int); typedef int (*pfun)(int, int); int Max(int a, int b) { return a > b ? a : b; } int Min(int a, int b) { return a < b ? a : b; } /* 函数指针调用例子 */ int Num1 = 20, Num2 = 30; function = Max; printf("Max is %d\n", function(Num1, Num2)); printf("Max is %d\n", (*function)(Num1, Num2)); function = Min; printf

C++面向过程编程

試著忘記壹切 提交于 2020-02-11 18:47:55
前言 C语言是面向过程的编程语言,C++是面向对象的编程语言,这是两种不同的编程语言。C语言是C++的子集,C++是C语言的超集,C++进一步扩充和完善了C语言,其中大部分是对于面向对象编程的拓展。C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。 从“Hello world!”讲起 传承学习编程语言的优良传统,我们来写一段“Hello world!”: #include <iostream> using namespace std; int main() { cout << "Hello World"; return 0; } 类 类(class)是用户自定义的数据类型,是一种构造类型,与C语言结构体类似,但是进行了一些扩展,类的成员不但可以是变量,还可以是函数,通过类定义出来的变量也有特定的称呼,叫做“对象”。类一般分为两部分,分别写在不同的文件当中,其一是头文件,用来声明这种类所提供的功能,另一个文件包含了完成这些操作的代码。想要使用类,就必须现在程序中包含头文件。 标准“输入/输出库” 在 C++ 标准的“输入/输出库”名为“ iostream ”,iostream 这个单词是由3个部分组成的,即 i-o-stream ,意为输入输出流。在 iostream

ios学习之旅---指针也不难

我们两清 提交于 2020-02-11 12:51:08
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; printf("(%d,%d)\n",x,y); // moveFront(x, y); // printf("(%d,%d)\n",x,y); } //假设你想訪问指针所指向存储空间,就必须使用訪问指针所指向的存储空间的操作符 void moveFront(int *x ,int *y) { // x = x + 2;//此时是改变指针的指向,而不是訪问指针所指向的存储空间 *x = *x + 2; } int main(int argc, const char * argv[]) { // 确定当前坐标 int x = 20; int y = 150; printf("(%d,%d)\n",x,y); moveFront(&x, &y); printf("(%d,%d)\n",x,y); return 0; } 2、指针的定义与初始化(重点掌握

C++ 引用详解

我与影子孤独终老i 提交于 2020-02-11 12:00:07
引用是C++引入的新类型,是对一块内存空间起的一个别名,主要分为 左值引用 、 常量左值引用 和 右值引用 三种。C++语言标准规定,一个引用不是左值引用就是右值引用。其中, 函数引用 是一种特殊的左值常量引用; 万能引用(universal reference) 是一种特殊的引用类型,既可以表示左值引用,也可以表示右值引用,具体的引用类型最终会由编译器决定,判断依据是 引用折叠(reference collasping) 。 一、左值引用 一句话总结:左值引用是一级指针的语法糖 。只有左值才能绑定到左值引用上。 int &a = 0; // a是int*的语法糖。 int *b = nullptr; int *&b_ref = b; // b_ref是int**的语法糖。 大量的资料表示,编译器中的引用是以指针实现的。然而,左值引用必须要初始化后才能使用,否则会引发编译错误(这与指针不同,野指针或者空指针即便不初始化也可以通过编译),所以可以这样理解: 如果代码通过了编译,那么引用的对象一定是可用的 。然而,凡事有利必有弊,这样的特性也会导致问题。最典型的问题是: 引用无法表示空值 。例如,有些对象的成员并不是必需的,在复制文件时并不一定需要提供进度通知,应该由用户自行决定,而不是强制要求提供: class file_copier { progress& _progress; /

ios学习之旅---指针也不难

落爺英雄遲暮 提交于 2020-02-11 10:24:41
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; printf("(%d,%d)\n",x,y); // moveFront(x, y); // printf("(%d,%d)\n",x,y); } //假设你想訪问指针所指向存储空间,就必须使用訪问指针所指向的存储空间的操作符 void moveFront(int *x ,int *y) { // x = x + 2;//此时是改变指针的指向,而不是訪问指针所指向的存储空间 *x = *x + 2; } int main(int argc, const char * argv[]) { // 确定当前坐标 int x = 20; int y = 150; printf("(%d,%d)\n",x,y); moveFront(&x, &y); printf("(%d,%d)\n",x,y); return 0; } 2、指针的定义与初始化(重点掌握

C语言指针总结

╄→尐↘猪︶ㄣ 提交于 2020-02-11 07:15:44
C语言中的精华是什么,答曰指针,这也是C语言中唯一的难点。 C是对底层操作非常方便的语言,而底层操作中用到最多的就是指针,以后从事嵌入式开发的朋友们,指针将陪伴我们终身。 本文将从八个常见的方面来透视C语言中的指针,当然,还有其他没有具体提到的方面,像指针表达式、指针安全等问题,以后有机会我再慢慢补充。 还是那句老话,重要的是实践,多写代码,才是学好C语言的关键。 1.指针类型分析 分析指针,可以从变量名处起,根据运算符优先级结合,一步一步分析. int p; //这是一个普通的整型变量 int *p; //首先从P处开始,先与*结合,所以说明P是一个指针,然后再与int结合,说明指针所指向的内容的类型为int 型.所以 P是一个返回整型数据的指针 int p[3]; //首先从P处开始,先与[]结合,说明P 是一个数组,然后与int结合,说明数组里的元素是整型的,所以 P是一个由整型数据组成的数组 int *p[3]; //首先从P处开始,先与[]结合,因为其优先级比*高,所以P是一个数组,然后再与*结合,说明数组里的元素是指针类型,然后再与 int结合,说明指针所指向的内容的类型是整型的,所以是一个由返回整型数据的指针所组成的数组 int (*p)[3]; //首先从P处开始,先与*结合,说明P是一个指针然后再与[]结合(与"()"这步可以忽略,只是为了改变优先级)

C语言 ---- 指针 iOS学习-----细碎知识点总结

萝らか妹 提交于 2020-02-11 07:15:27
内存的访问形式:1、直接访问:通过变量名进行访问。2、间接访问:先找到变量存放的地址,然后根据地址去访问对应的内存空间。 指针--- // 定义一个整形指针变量,用来存储num1在内存中的地址 int *p = NULL; // 定义一个整形指针变量,指向0x0,NULL恒等于0 printf("%p\n", p); // 输出指针变量的值,使用"%p" printf("&num1 = %p\n", &num1); // 取址运算符,取得变量所在的内存地址 p = &num1; // 给整形指针变量重新赋值 printf("p = %p\n", p); printf("*p = %d\n", *p); // "*"取值运算符,取出地址里面存储的数据 // 当我们定义指针变量的时候,"*"只是起一个标识作用,告诉我们这个变量是一个指针变量。 // 当我们使用指针变量的时候,"*"表示的是从当前地址里面取出存储的数据。 // 指针的算术运算,只有加和减 int num1 = 100; int num2 = 200; int *p = &num2; printf("*p = %d\n", *p); printf("*(p + 1) = %d\n", *(p + 1)); // p + 1是指针向高位移动n个字节,n指的是指针指向的数据类型所占有的字节数(int *p移动4个字节,

黑马程序员-----结构体数组

别等时光非礼了梦想. 提交于 2020-02-11 07:15:00
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ----- 第一讲 结构体数组 一、结构体数组的概念 数组的元素也可以是结构类型的。因此可以构成结构型数组。结构数组的每一个元素都是具有相同结构类型的下表结构变量。在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体。如一个班的学生档案,一个车间职工的工资表等。 二、结构数组定义 定义格式: struct 结构名{ 成员表列 }数组名[数组长度]; 例如:定义一个长度为5的数组,其中每一个元素都是stu结构类型。 struct stu{ int num; char *name; char sex; float score; }boy[5]; 定义了一个结构数组boy,共有5个元素,boy[0]~boy[4].每个数组元素都具有struct stu的结构形式。 1 /* 2 结构体数组: 3 4 用来存放大量的结构体相同的结构体变量。 5 6 结构体数组定义: 7 8 结构体数组定义的第一种方式: 9 1.定义结构体的同时,定义数组 10 struct Student{ 11 int age; 12 char *name; 13 int sno; 14 float score; 15

C语言-指针

泄露秘密 提交于 2020-02-11 06:53:43
无指针,不自由 --1-- 为什么要使用指针 1.1 指针的基本概念 1.2 使用指针的好处 1.3 变量的存储方式 --2-- 指针变量 2.1 指针变量 2.2 定义一个指针变量 2.3 指针变量的初始化方法 2.4 使用 * 获取指针对应存储区域的内容 --3-- 存储细节 3.1 变量及指针变量 --4-- 常见的应用场景 4.1 指针常见的应用场景 --5-- 多级指针介绍 5.1 二级指针 5.2 多级指针介绍 ---------------------------- 【写在开头:】 『 生活中的指针: 没错,就是一个门牌号。 指针是 C 语言中最重要的内容之一。 为什么要使用指针? 如果你想要查找一篇资料,给你一本厚重的百科全书,而你只需要其中第3001页的内容。 那么,3001页,就是指针。如果没有这个指针...好吧,我去旁边哭会儿... 』 --1-- 为什么要使用指针 1.1 指针的基本概念 内存单元的编号也叫做地址,根据内存单元的编号或地址就就可以找到所需的内存单元。 所以通常也把这个地址称为指针 1.2 使用指针的好处 1 )为函数提供修改调用变量的灵活手段 2 )让函数有多个返回值 3 )可以改善程序的效率   在数据传递时,如果数据块较大(比如数据缓冲区或比较大的结构),这时就可以使用指针传递地址而不是实际数据,既提高传输速度,又节省了大量的内存 4