C++中的指针基础:指针变量的声明、初始化、指针运算符

最近因为项目在写c代码,发现指针基础知识都已经开始忘了,仅此留下笔记以便以后复习。

指针变量的声明和初始化

 

指针变量把内存地址作为它们的值。通常,变量包含特定的值。但是,指针包含的是包含特定值的变量的内存地址,即:变量名直接引用数值,而指针间接引用数值,如下图所示。注意:在图中,通常把指针表示为一个变量指向另一个变量的箭头,前者包含一个地址值,后者则是在内存中位于该地址的变量。

和其他变量一样,指针在使用前必须被声明。上图中的指针声明如下:

int  *countPtr, count;

声明了countPtr是int*类型的(即一个指向int值的指针),读作“countPtr是一个指向int的指针”,或“countPtr指向一个 int类型的对象”。注意:count是一个int类型的变量,但不是指向int的指针。

指针可以在声明时或在赋值语句中初始化。指针可以被初始化为0,NULL或地址。值为0或NULL的指针不能指向任何对象,称为空指针。只有整数0可以直接赋值给一个指针变量,而其他整数要先强制转换成一个指针类型。

指针运算符

  • 指针运算符&是一个一元运算符,返回操作数的内存地址。

注意: 一级指针指向的内容一定是一个“地址”,而不是普通变量。我们在使用的时候,对一级指针赋值,一定要给一个  地址,而不是变量)例如:

   int y=5;

   int *yPtr;

   yPtr = &y; //变量y的地址赋值给指针变量yPtr;变量yPtr“指向”y。

下图为一个内存中指针的另外一种示意图,其中假设整数变量y存储在内存地址600000,指针变量yPtr存储在内存地址500000.

  • *运算符通常称为间接运算符或间接引用运算符,它返回其指针操作数所指向的对象的同义词(即别名或昵称)。

例如(参见图8.2):

cout << *yPtr << endl; //打印变量y的值,5,等价于:cout<<y<<endl;

间接引用的指针也可以在赋值语句的左边使用。

*yPtr=9;//表示把9赋值给图8.3中的y

使用间接引用指针来接收输入的值:

cin >> *yPtr;//表示把输入的值存放到y中

 下面实例:

#include <iostream>
using namespace std;

int main(){
	int a;
	int *aPtr;
	
	a=7; 
	aPtr=&a;
	
	cout<<"a的地址是:"<<&a    //0012F580
	    <<"\naPtr的值是:"<<aPtr<<endl;  0012F580
	cout<<"a的值是:"<<a                //7
	    <<"\n *aPtr的值是:"<<*aPtr<<endl;//7
	cout<<"*和&是互为相反的"<<endl;
	cout<<"&*aPtr = "<<&*aPtr<<endl;       //&*aPtr0012F580
	cout<<"*&aPtr = "<<*&aPtr<<endl;       //*&aPtr0012F580
}

注意:

(1)在第一次定义时: *不是引用的功能。

(2) 其他任何情况下,* 都是表示引用的功能,即:通过 * 告诉编译器,程序要取这个指针所指向的地址里的内容(也就是间接引用:先根据指针的值,这个指针的值,不是普通变量值,而是一个 地址,然后再通过这个地址,获取对应的值)。


版权声明:本文为sdd0804原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。