当前位置:首页 > 系统运维

学习C++指针声明和指针相关概念

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++ 程序员应该清楚的几个重要的指针概念 -

空指针

如果没有要分配的确切地址,将指针 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 

 【编辑推荐】

鸿蒙,就算套壳安卓又能怎样呢? Kubernetes为什么要弃用Docker? 从“PPT系统”走向现实:HarmonyOS,你真香了吗? 这6款Python IDE&代码编辑器,你都用过吗? Kubernetes实践之优雅终止

分享到:

滇ICP备2023006006号-16