一文带你理解C++的指针

指针的基本概念

1)变量的地址

        变量是内存变量的简称,在C++中,每定义一个变量,系统就会给变量分配一块内存,且内存是有地址的。

        C++用运算符&获取变量在内存中起始地址

语法:&变量名

2)指针变量

        指针变量简称指针,它是一种特殊的变量,专用于存放变量在内存中起始地址

        语法:数据类型 *变量名;

        数据类型必须是合法的C++数据类型(intchar、double或其它自定义的数据类型)。

        星号*与乘法中使用的星号是相同的,于表示这个变量是指针。

3)对指针赋值

        不管是整型、浮点型、字符型,还是其它的数据类型的变量它的地址都是一个十六进制数。我们用整型指针存放整数型变量的地址;用字符型指针存放字符型变量的地址;用浮点型指针存放浮点型变量的地址,用自定义数据类型指针存放自定义数据类型变量的地址。简单来说,就是指针基类型要与指针指向的内存存放的数据类型相对应。

语法指针=&变量名;

注意:

  • 对指针的赋值操作也通俗的被称为“指向某变量”,被指向的变量的数据类型称为“基类型”。
  • 如果指针的数据类型与基类型不符,编译会出现警告。但是,可以强制转换它们的类型。

4)指针占用的内存

        指针也是变量,是变量就要占用内存空间。

        在64位的操作系统中,不管是什么类型的指针,占用的内存都是8字节。

        在C++中,指针是复合数据类型,复合数据类型是指基于其它类型而定义的数据类型,在程序中,int是整型类型,int*是整型指针类型,int*可以用于声明变量,可以用于sizeof运算符,可以用于数据类型的强制转换,总的来说,把int*当成一种数据类型就是了。


使用指针

声明指针变量后,在没有赋值之前,里面是乱七八糟的值,这时候不能使用指针。

指针存放变量的地址,因此,指针名表示的是地址(就像变量名可以表示变量的值一样)

*运算符被称为间接值解除引用(解引用)运算符,将它用于指针,可以得到该地址的内存中存储的值,*也是乘法符号,C++除乘法外,都表示解引用符。

变量和指向变量的指针是一对多的关系,一个变量,可以由多个指针变量表示。


指针用于函数的参数

        如果把函数的形参声明为指针,调用的时候把实参的地址传进去,形参中存放的是实参的地址,在函数中通过解引用的方法直接操作内存中的数据,可以修改实数的值,这种方法被通俗的称为地址传递传地址

值传递:函数的形参是普通变量。

        之前的文字提到过通过值传递传给被调用函数进行操作的话,调用函数里面内存的数据是不会被修改的。

传地址的意义如下:

  • 可以在函数中修改实参的值。
  • 减少内存拷贝,提升性能。

#include<iostream>
using namespace std;

int main() {
	int a = 0, b = 0;

	cin >> a;
	cin >> b;

	int* pa = &a;
	int* pb = &b;

	swap(*pa,*pb);
	cout << *pa << " " << *pb << endl;

	return 0;
}

void swap(int* x,int* y) {
	int temp;
	temp = *x;
	*x = *y;
	*y = temp;
}

用const修饰指针 

1)常量指针

语法const 数据类型 *变量名;

不能通过解引用的方法修改内存地址中值(用原始的变量名是可以修改的)。

注意:

  1. 指向的变量(对象)可以改变(之前是指向变量a的,后来可以改为指向变量b)。
  2. 一般用于修饰函数的形参,表示不希望在函数里修改内存地址中的值。
  3. 如果用于形参,虽然指向的对象可以改变,但这么做没有任何意义。
  4. 如果形参的值不需要改变,建议加上const修饰,程序可读性更好。
#include<iostream>
using namespace std;

int main()
{

	int a = 3;

	// 常量指针的语法:const 数据类型* 变量名;
	// 不能通过解引用的方法修改内存地址中的值(用原始的变量名是可以修改的)。
	const int* p = &a;
	*p = 8;                     //报错
    a = 8;                      //成功运行
	cout << "a=" << a << ",*p=" << *p << endl; 
}

2)指针常量

语法数据类型 * const 变量名;

指向的变量(对象)不可改变。

注意:

  1. 在定义的同时必须初始化,否则没有意义。
  2. 可以通过解引用的方法修改内存地址中值。 
  3. C++编译器把指针常量做了一些特别的处理,改头换面之后,有一个新的名字,叫引用

 

3)常指针常量 

语法const 数据类型 * const 变量名;

指向的变量(对象)不可改变,不能通过解引用的方法修改内存地址中值。

常引用。

  • 常量指针:指针指向可以改,指针指向的值不可以更改。
  • 指针常量:指针指向不可以改,指针指向的值可以更改。
  • 常指针常量:指针指向不可以改,指针指向的值不可以更改。

记忆秘诀:*表示指针,指针在前先读指针;指针在指针就不允许改变。

常量指针:const 数据类型 *变量名

指针常量:数据类型 * const 变量名

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Eclipse是一个开放源代码的集成开发环境(IDE),可用于Java开发,但也可以用于其他编程语言开发。在本文中,我将向你展示如何使用Eclipse进行Java开发。 1. 下载Eclipse 首先,你需要从Eclipse官方网站下载Eclipse IDE。下载页面上将提供几个不同的版本,包括Eclipse IDE for Java Developers、Eclipse IDE for JavaScript and Web Developers,以及Eclipse IDE for C/C++ Developers等。选择适合你的版本,然后按照安装向导进行安装。 2. 创建Java项目 一旦你安装了Eclipse,你可以启动它并创建一个新的Java项目。选择“File”->“New”->“Java Project”,然后按照向导创建一个新的Java项目。在创建项目时,你需要指定项目名称、项目类型以及JRE版本等信息。 3. 创建Java类 一旦你创建了一个Java项目,你就可以创建一个Java类。选择你的Java项目,在“src”文件夹上右键单击,然后选择“New”->“Class”。输入类名和选择要继承的类(如果有的话),然后点击“Finish”。 4. 编写Java代码 现在你已经创建了一个Java类,可以开始编写Java代码了。在Eclipse的编辑器中,你可以输入Java代码并保存它。当你保存Java文件时,Eclipse会自动编译你的代码,并在Problems视图中显示任何编译错误。 5. 运行Java程序 一旦你编写了Java代码并保存了它,你可以运行Java程序。右键单击Java文件,然后选择“Run As”->“Java Application”。如果一切顺利,你的Java程序将在控制台中输出结果。 6. 调试Java程序 如果你的Java程序出现了错误或不按预期运行,你可以使用Eclipse的调试器来调试它。在Eclipse的编辑器中,你可以设置断点并启动调试器。当程序执行到断点时,调试器会暂停程序并允许你检查变量、运行代码等。 7. 导入外部JAR包 有时,你可能需要使用外部JAR包来完成你的Java项目。在Eclipse中,你可以简单地将外部JAR包导入到你的项目中。右键单击Java项目,然后选择“Build Path”->“Configure Build Path”。在“Libraries”选项卡上,你可以添加外部JAR包。 总结 在本文中,我们介绍了如何使用Eclipse进行Java开发。我们学习了如何创建Java项目、创建Java类、编写Java代码、运行Java程序、调试Java程序以及导入外部JAR包。Eclipse具有强大的功能,可以大大提高Java开发的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幸福西西弗斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值