C++指针详解

114 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情

C++指针详解

1、简单使用

计算机程序在存储数据时必须跟踪3种属性 1、信息存储在何处 2、存储的值是多少 3、存储的信息是什么类型 指针是一个变量,其存储的是值的地址,而不是值本身。 获取常规变量地址 使用&——地址运算符

#include <iostream>
int main()
{
	using namespace std;
		int donuts = 6;//声明变量
		double cups = 4.5;//声明变量
		
		cout << "donuts value = " << donuts;//打印变量值
		cout << " and donuts address = " << &donuts<<endl;//打印变量地址
		cout << "cups value =  " << cups;//打印变量值
		cout << " and cups address = " << &cups << endl;//打印变量地址
		
		cin.get();
		return 0;
}

程序输出 在这里插入图片描述

  • 运算符被称为解除引用或间接值运算符,将其应用于指针,可以得到该地址处存储的值。
#include <iostream>
int main()
{
	using namespace std;
		int jone = 6;//声明变量		
		int *  p_jone ;//声明指针变量
		p_jone = &jone;//赋值指针变量
		cout << "jone value = " << jone;//打印变量值
		cout << " jone value = " << *p_jone << endl;//通过地址打印变量值
		cout << " jone address = " << p_jone  ;//打印变量地址
		cout << " jone address = " << &jone << endl;//打印变量值地址
	    *p_jone = *p_jone + 1;  //*p_jone相当于一个int变量
		cout << " new jone = " << jone << endl;//通过地址改变变量值
		cin.get();
		return 0;
}

程序输出 在这里插入图片描述 其中 指针变量的声明和赋值可以在一起

int *  p_jone = &jone;//声明指针变量

这句话相当于

		int *  p_jone ;//声明指针变量
		p_jone = &jone;//赋值指针变量

2、指针声明和初始化

计算机需要跟踪指针指向的类型。指针声明时必须指定指针指向的数据类型。 注意 int* p1,p2 p1是一个指针,p2则是int变量 可以在声明语句中初始化指针。在这种情况下,被初始化的是指针,而不是指向的值。也就是说下面的语句将pt(而不是*pt)的值设置未&jone:

int jone=7int * pt = &jone;

一定要在对指针应用解除引用运算符(*)之前,将指针初始化为一个确定的,适当的地址。

3 、使用new来创建动态数组

将数组的元素类型和元素数目告诉new。必须在类型名后加上方括号,其中包含元素数目。

double * p3 = new double[3];

delete时也要加方括号 ,释放整个数组。 动态数组中,p3是指向一个double(数组第一个元素)的指针。 因此* p3是第一个元素的值,但是其它元素怎么表示呢? 只需要把指针当数组名就行 也就是说第1个元素可以使用p3[0] 第2个元素可以使用p3[1] 第3个元素可以使用p3[2]

#include <iostream>
int main()
{
	using namespace std;	
	double * p3 = new double[3];//声明动态数组 指针
	p3[0] = 0.1;//指针指向赋值
	p3[1] = 0.2;//指针指向赋值
	p3[2] = 0.3;//指针指向赋值
	p3[3] = 0.4;//指针指向赋值(多赋值了一个) 后面内存没被占用虽然只申请了前三个,但第四个也可用
	cout << "p3[0]=" << p3[0] << endl;//打印第1个元素
	cout << "p3[0]=" << *p3 << endl;//以指针取值打印第1个元素
	cout << "p3[1]=" << p3[1] << endl;//打印第2个元素
	cout << "p3[2]=" << p3[2] << endl;//打印第3个元素
	p3 = p3 + 1;//指针加1,指向了第二个元素
	cout << "new p3[0]=" << p3[0] << endl;//打印第2个元素
	cout << "new p3[1]=" << p3[1] << endl;//打印第3个元素
	cout << "new p3[2]=" << p3[2] << endl;//打印第4个元素
		cin.get();
		return 0;
}

程序输出 在这里插入图片描述