小白学习C++ 教程七在C++指针声明和指针相关概念

Posted 刘润森!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小白学习C++ 教程七在C++指针声明和指针相关概念相关的知识,希望对你有一定的参考价值。

@Author:Runsen

C++ 指针学习起来有点难,但是很重要。一些 C++ 程序使用指针更容易执行,另外其他 C++ 程序,例如动态内存分配,没有指针就无法执行。

每个变量都是一个内存位置,每个内存位置都定义了其地址,可以使用与号(&)运算符访问该地址,该运算符表示内存中的地址。

下面代码考虑以下将打印定义的变量的地址

#include <iostream>

using namespace std;
int main () {
   int  var1;
   char var2[10];

   cout << "Address of var1 variable: ";
   cout << &var1 << endl;

   cout << "Address of var2 variable: ";
   cout << &var2 << endl;

}

输出如下

Address of var1 variable: 0x61fe1c
Address of var2 variable: 0x61fe12

指针声明

在编程语言中,指针是一个变量,其值是另一个变量的地址。与任何变量或常量一样,您必须先声明一个指针,然后才能使用它。

指针变量声明的一般形式是 :

type *var-name;

这里,type是指针的类型;它必须是有效的 C++ 类型,并且var-name是指针变量的名称。

用于声明指针的星号与用于乘法的星号相同。但是,在此语句中,星号用于将变量指定为指针。

下面是有效的指针声明

int    *ip;    // pointer to an integer
double *dp;    // pointer to a double
float  *fp;    // pointer to a float
char   *ch     // pointer to character

所有指针的值的实际数据类型,无论是整数、浮点数、字符还是其他类型,都是相同的,一个长的十六进制数,代表同一个内存地址。

不同数据类型的指针之间的唯一区别是指针指向的变量或常量的数据类型

C++ 使用指针

象征名称描述
&(与号)地址运算符确定变量的地址。
∗(星号)间接运算符访问地址的值。
#include <iostream>
using namespace std;

int main(){
    int var = 5;
    int *ip;
    ip = &var;
    cout << "变量Var的值:"  << endl;
    cout << var << endl;
    cout << "变量Var的中存储的地址ip:" << endl; 
    cout << ip << endl;
    cout << "访问指针中可用地址处的值:";
    cout << *ip << endl;
}

具体输出如下

变量Var的值:
5
变量Var的中存储的地址ip:
0x61fe14
访问指针中可用地址处的值:5

请注意,0x0相当于0. 它只是 的十六进制表示0。

指针的概念

指针有很多但很简单的概念,它们对 C++ 编程非常重要。以下是 C++ 程序员应该清楚的几个重要的指针概念 -

指针说明
空指针C++ 支持空指针,它是在几个标准库中定义的零值常量。
指针算术有四种算术运算符可用于指针:++、–、+、-
指针与数组指针和数组之间有着密切的关系。
指针数组您可以定义数组来保存多个指针。
指向指针的指针C++ 允许您在指针上使用指针等等。
将指针传递给函数通过引用或通过地址传递参数都允许被调用函数在调用函数中更改传递的参数。
从函数返回指针C++ 允许函数返回指向局部变量、静态变量和动态分配的内存的指针。

空指针

如果没有要分配的确切地址,将指针 NULL 分配给指针变量。分配为 NULL 的指针称为空指针。

#include <iostream>

using namespace std;
int main () {
   int  *ptr = NULL;
   cout << "The value of ptr is " << ptr ;
 }

当上面的代码被编译和执行时,它会产生以下结果 -

The value of ptr is 0

在大多数操作系统上,不允许程序访问地址 0 处的内存,因为该内存是由操作系统保留的。空指针:指针变量指向内存中编号为0的空间

要检查空指针,您可以使用 if 语句如下 -

if(ptr)     // succeeds if p is not null
if(!ptr)    // succeeds if p is null

指针算术

指针是一个地址,它也是一个数值;因此,可以像对数值一样对指针执行算术运算。有四种算术运算符可用于指针:++、--、+-

“指针++”和“指针–”表示指针所指地址的下一个或前一个数据的地址。

#include <iostream>
using namespace std;
int main()
{
	int a[5];
	int i;
	int *p;
	for(i=0; i<5; i++)
		cin>>a[i];
	cout<<endl;
	for(i=0; i<5; i++)
		cout<<a[i]<<"  ";//使用数组名和下标访问的方式访问数组进行输出
	for(i=0; i<5; i++)
		cout<<*(a+i)<<"  ";//使用数组名和指针运算访问的方式进行输出
	for(p=a; p<(a+5); p++)
		cout<<*p<<"  ";//使用指针变量访问的方式进行输出
	return 0;
}

运行结果

1
2
3
4
5

1  2  3  4  5  1  2  3  4  5  1  2  3  4  5

以上是关于小白学习C++ 教程七在C++指针声明和指针相关概念的主要内容,如果未能解决你的问题,请参考以下文章

小白学习C++ 教程八在C++指针传递引用和Const关键字

小白学习C++ 教程八在C++指针传递引用和Const关键字

小白学习C++ 教程六C++内置函数和函数传参

C++学习笔记

这次肯定可以看懂C++智能指针,适合新手小白,C++内功修炼

C++:指针小白易混点