C++指针详解

举报
月照银海似蛟龙 发表于 2022/07/29 22:32:42 2022/07/29
【摘要】 C++指针详解 1、简单使用 计算机程序在存储数据时必须跟踪3种属性 1、信息存储在何处 2、存储的值是多少 3、存储的信息是什么类型 指针是一个变量,其存储的是值的地址,而不是值本身。 获取常规变量...

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;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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

  • 运算符被称为解除引用或间接值运算符,将其应用于指针,可以得到该地址处存储的值。
#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}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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

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

  
 
  • 1

这句话相当于

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

  
 
  • 1
  • 2

2、指针声明和初始化

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

int jone=7int * pt = &jone;

  
 
  • 1
  • 2

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

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

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

double * p3 = new double[3];

  
 
  • 1

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;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

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

文章来源: blog.csdn.net,作者:月照银海似蛟龙,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_32761549/article/details/92782702

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。