第8章 指针

来源:互联网 发布:网线测试软件 编辑:程序博客网 时间:2024/06/06 20:58

1、指针用于控制对象的内存地址,可以直接访问和操作系统内存,合理运用指针可以让程序性能得到很好优化。

 

被用来操作变量地址的特殊类型的变量就是指针变量。指针可以用于数组,或者作为函数的参数,用于访问内存和堆内存的操作。

 

程序中的所有变量和常量都存在一个内存地址中。这个内存地址表示变量或者常量在内存中存储的位置,同样,函数也有对应的内存地址。内存地址的不同会导致程序执行时有所不同,指针就是用来存储内存地址的变量。

 

指针用来存储内存地址的变量,指向单个对象的地址,除了void指针类型以外,指针的数据类型与所指向地址的变量数据类型必须保持一致。

 

2、没有初始化的指针指向是随机的,有可能导致随机修改了程序的值。指针的初始化就是给指针赋初值,&符号可以用来获取对象的内存地址,并且赋值给指针变量。指针变量的初始化和赋值都可以通过运算符“=”来实现。





3、  指针用于指向对象。一个指针只指向一个对象的内存地址。

如果在表达式中使用数组名时,该数组名会自动转换为指向数组第一个元素的指针。

C++中,指针对于数组的操作是通过将数组的地址,通常是第一个数的地址赋值给指针来进行操作的。指针可以操作一维和多维数组。

 


4、指针和const限定符之间的两种交互类型:const对象的指针和const指针。

指向const对象的指针是指 指针指向const对象的地址,编程者使用指针来修改其所指对象的值。但是如果指针指向const对象,则不允许用来指针来改变其所指的const值,因此const值是不可修改的。

 

const指针自身的值不能被修改。但是可以使用该指针修改它所指向对象的值。 指针所指对象的值能否修改完全取决于该对象的类型,而指向const变量的指针不可以修改所指向的const变量的值,但是自身可以被重新赋值。

 

 

5、数组指针:指向一个数组的指针。

Int (*ap) [2];//定义一个指向含有2个元素的数组的数组指针。

 

指针数组:一个数组的每个元素都是指针。(指针数组是一个只包含指针元素的数组,它的元素可以指向相同类型的不同对象)

Char * chararr[]=={”Fortan””c””c++”,”Basic”}//定义了一个指针数组且对其进行初始化,chararr数组的每个元素都存放着一个字符指针,初始化时每个值都是一个字符串常量,而对应的字符指针存储了3个字符第一个字母在内存中的位置。

 

6、指向函数代码首地址的指针变量称为函数指针。

()”运算符的优先级高于“*”,所以指针变量名外的括号不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。函数指针和它所指向的函数的参数个数和类型必须保持一致,函数指针和类型和函数的返回值类型也必须保持一致。

 

函数指针就是指向函数的存储空间地址的指针。可以对函数指针进行赋值并且通过函数指针来调用函数。


7、函数指针是一个指向函数的指针,本质是一个指针。

指针函数只是说明是一个返回值为指针的函数,本质是一个函数。

 

8this指针,在C++中表示当前运行的对象。在实现对象的方法时,可以使用this指针来获得该对象自身的引用。

 

this指针是一个隐含的指针,是指向对象本身的,表示当前对象的地址。(在调用成员函数时,编译器会隐含插入一个参数,这个参数就是this指针。This指针指向当前对象本身,表示当前对象的地址)

 

9、函数的参数和返回值的传递方式有3种:引用传递、值传递、指针传递。

 

值传递:是将要传递的值作为一个副本传递。值传递过程中,被调函数的形参作为被调函数的局部变量处理,在内存的堆栈中开辟空间以存放由主调函数放进来的实参的值,从而成为实参的一个副本。值传递特点是被掉函数对形参的任何操作度是作为局部变量进行,不会更改主调函数的实参变量的值。

 

引用传递传递的是引用对象的内存地址。在地址传递过程中,被调函数的形参也作为局部变量在堆栈中开辟内存空间,这时存放的是由主调函数放进来的实参变量的地址。被掉函数对形参的任何操作都被处理成间接地址,即通过堆栈中存放的地址访问主调函数中的实参变量。所以,被调函数对形参做的任何操作都会影响主调函数中的实参变量。

 

10、指针指向一块内存,它的内容是所指内存的地址(指针是作为一个真正的实体而存在的);

而引用是某块内存的别名。


指针 VS. 引用


原创粉丝点击