指针

一、搞清关键

	int i = 10, *p = &i;
  • 说法:指针 = 指针变量
  • 指针的地址:指针变量在内存中的地址,获取方式为:&p
  • 指针指向的对象的地址:等价于指针变量的内容,是指针变量所占的内存空间中的内容,获取方式为:p 或 &i
  • 指针 p 指向变量 i:指针变量 p 的(p的值就是p所占内存空间的内容)为变量 i 的地址
  • 不初始化指针:该指针(变量)所占的内存空间中的内容作为该指针的初始值,即被看作一个地址值

【指针既是类型也是变量??】

指针:指向另一种类型的复合类型,即指针是一种类型

譬如说,我们定义指针变量 pint *p;

我们往往称 p 为指针 p,但若我们定义整形变量 i:int i;

我们不会称 i 为整型 i,而是称为变量 i

其实我们所谓的“指针 p”相当于“指针变量 p”,所以我们以后在谈到指针时,就直接将指针视为指针变量,潜在之意是谈到指针,不要想它是一个类型,只想它是一个变量即可。

于是,一系列名词来袭:“指针指向”=“指针变量的值为”、“空指针”=“指针变量变量的值为0”、“初始化指针”=“初始化指针变量”

 

二、空指针

  • 空指针不指向任何对象(因为将其内存空间的值定义为0了,也即该指针指向地址为0的内存空间)

【生成空指针的几种方法】

	//way 1
	int *p1 = nullptr;        //等价于int *p1 = 0;
	
	//way 2
	int *p2 = 0;            //通过将指针初始化为字面值0来生成空指针
	
	//way 3
	int *p3 = NULL;			//等价于int *p3 = 0;

【nullptr】

  • 字面值,用它来初始化指针是得到空指针最直接的方法。
  • nullptr 是一种特殊类型的字面值,它可以被转换成任意其他的指针类型

【NULL】

  • 预处理变量,可以用它来给指针赋值,它是在头文件 cstdlib 中定义的,它的值就是0。

 

三、示例

题目:编写一个函数,使用指针形参交换两个整数的值。

#include <iostream>
#include <vector>
#include <string>

using std::cin;
using std::cout;    
using std::endl;
using std::vector;
using std::string;

void swap(int *p1, int *p2)
{
	int tmp;
	tmp = *p1;
	*p1 = *p2;			//改变P1所指对象的值 
	*p2 = tmp;
}

int main() 
{
	int a, b;
	while (cin >> a >> b) {
		cout << "交换前:a = " << a << ", b = " << b << endl;
		swap(&a, &b); 
		cout << "交换后:a = " << a << ", b = " << b << endl;
	}
    return 0;
}

  

posted @ 2017-10-10 19:10  GGBeng  阅读(216)  评论(0编辑  收藏  举报