C++基础——指针

简介: C++基础——指针

指针的声明

数据类型识别符 *指针变量名 例:int *p_ipoint;//声明一个整形指针


指针的赋值

第一种赋值方式 在初始化的时候赋值


int i=100;  int *p=&I;


第二种赋值方式 在后期赋值


int i=100; int *p; p=&I;


说明:通过变量名访问一个变量是直接的,而通过指针访问一个变量是间接的。


关于指针使用的说明。

指针变量名是p,而不是*p,p=&i的意思是取变量i的地址赋給指针变量p。例:


#include <iostream>



int main()


{


   int i = 100;


   int *p = &i;


   printf("%d\n",p);


}

tt.png

指针变量不可以直接赋值。例:

int i = 100;

   int *p;

   p = 100;

编译不能通过,错误如下:

tt.png

 int *p;


   p =(int*)100;//通过强制转换将100赋值给变量指针。


   printf("%d", p);//输出地址,能够输出地址


   printf("%d", *p);//输出指针指向的值,出错语句


不能将*p当变量使用。例:


int *p;


   *p =100;//指针没有获得地址。


   printf("%d", p);//输出地址,出错语句


   printf("%d", *p);//输出指针指向的值,出错语句


指针运算符和取地址运算符

*是指针的运算符,&是取地址运算符。


声明并初始化指针变量是同时用到了*和&这两个运算符。例:


int *p=&a;


该语句等同于如下语句:


int *(p=&a);


如果写成*p=&a,程序就会报错。


&*p中的p只能是指针变量,如果将*放在变量名前,编译的时候会有逻辑错的。


注意:&*p和*&a的区别。


&和*的运算符优先级别相同,按自右而左的方向结合,因此&*p是先进行*运算,*p相当于变量a;再进行&运算,&*p就相当于取变量a的地址。*&a是先计算&运算符,&a就是取变量a的地址,然后计算*运算,*&a就相当于去变量a所在地址的值,实际就是变量a。


指向空的指针与空类型指针

指针可以指向任何数据类型的数据,包括空类型(void):


void* p;  //定义一个指向空类型的指针变量。


空类型指针可以接受任何类型的数据,当使用它是,可以将其强制转换为所对用数据类型。例:


#include <iostream>


using namespace std;


int main()


{


   int *pl = NULL;


   int i = 4;


   pl = &i;


   float f = 3.333f;


   bool b = true;


   void *pV = NULL;


   cout << "依次赋值给空指针" << endl;


   pV = pl;


   cout << "pV=pl------" << (int*)pV << endl;


   cout << "pV=pl-------转为float类型指针" << *(float*)pV << endl;


   pV = &f;


   cout << "pV=&f--------" << *(float*)pV << endl;


   cout << "pV=&f------转为int类型指针" << *(int*)pV << endl;


   return 0;


}


tt.png

tt.png

指向常量的指针与指针常量、

同其他数据类型一样,指针也有常量,使用const关键字形式如下:


int i=9;


int* const p=&i;


*p=3;


将关键字const放在标识符前,表示这个数据本身是常量,而数据类型是int*,即整形指针。与其常量一样,指针常量必须初始化。我们无法改变他的内存指向,但是可以改变它指向内存的内容。


  若将关键字const放到指针类型的前方,形式如下:


          int i=9;


          int const* p=&i;


  这是指向常量的指针,虽然它所指向的数据可以通过赋值语句进行修改,但是通过该指针修改内存内容的操作是不被允许。


  当const以如下形式使用时:


int i=9;


int const* const p=&i;


该指针是一个指向常量的指针常量。既不可以改变它的内存指向,也不可以通过它修改指内存的内容。


例:


#include <iostream>


using namespace std;


int main()


{


   int i = 5;


   const int c = 99;


   const int* pR = &i;//这个指针只能用来“读”内存数据,但可以改变自己的地址。


   int* const pC = &i;//这个指针本身是常量,不能改变指向,但是能够改变内存的内容。


   const int* const pCR = &i;//这个指针只能用来“读”内存数据,并且不能改变指向


   cout << "三个指针都指向了同一个变量i,同一块内存" << endl;


   cout << "指向常量的指针pR操作:"<<endl;


   cout << "通过赋值语句修改i:" << endl;


   i = 100;


   cout << "i:" << endl;


   cout << "将 pR的地址变成常量c的地址:" << endl;


   pR = &c;


   cout << "*pR:" << endl;


   cout << "指向常量的指针pC操作:" << endl;


   cout << "通过pC改变i值:" << endl;


   *pC = 6;


   cout << "i:" << i << endl;


   cout << "指向常量的指针常量pCR操作:" << endl;


   //pCR=&c;        //报错


   //*pCR=100;      //报错


   cout << "通过pCR无法改变任何东西,真正做到了只读" << endl;


   return 0;


}

tt.png


tt.png

目录
相关文章
|
1月前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
76 4
|
2月前
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
2月前
|
存储 C++
c++的指针完整教程
本文提供了一个全面的C++指针教程,包括指针的声明与初始化、访问指针指向的值、指针运算、指针与函数的关系、动态内存分配,以及不同类型指针(如一级指针、二级指针、整型指针、字符指针、数组指针、函数指针、成员指针、void指针)的介绍,还提到了不同位数机器上指针大小的差异。
56 1
|
2月前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
40 2
|
2月前
|
存储 安全 编译器
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(一)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
2月前
|
存储 C++ 索引
C++函数指针详解
【10月更文挑战第3天】本文介绍了C++中的函数指针概念、定义与应用。函数指针是一种指向函数的特殊指针,其类型取决于函数的返回值与参数类型。定义函数指针需指定返回类型和参数列表,如 `int (*funcPtr)(int, int);`。通过赋值函数名给指针,即可调用该函数,支持两种调用格式:`(*funcPtr)(参数)` 和 `funcPtr(参数)`。函数指针还可作为参数传递给其他函数,增强程序灵活性。此外,也可创建函数指针数组,存储多个函数指针。
|
3月前
|
编译器 C++
【C++核心】指针和引用案例详解
这篇文章详细讲解了C++中指针和引用的概念、使用场景和操作技巧,包括指针的定义、指针与数组、指针与函数的关系,以及引用的基本使用、注意事项和作为函数参数和返回值的用法。
52 3
|
2月前
|
算法 C++
【算法】双指针+二分(C/C++
【算法】双指针+二分(C/C++
|
2月前
|
存储 编译器 程序员
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(二)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
3月前
|
C++
C++(十八)Smart Pointer 智能指针简介
智能指针是C++中用于管理动态分配内存的一种机制,通过自动释放不再使用的内存来防止内存泄漏。`auto_ptr`是早期的一种实现,但已被`shared_ptr`和`weak_ptr`取代。这些智能指针基于RAII(Resource Acquisition Is Initialization)原则,即资源获取即初始化。RAII确保对象在其生命周期结束时自动释放资源。通过重载`*`和`-&gt;`运算符,可以方便地访问和操作智能指针所指向的对象。