C/C++指针

Posted 小潘的CS学习笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++指针相关的知识,希望对你有一定的参考价值。

C/C++中const修饰的为常量,即一旦初始化后就不可以在修改,那么在const修饰指针时,位置会有所区别,代表的含义也不相同:

 int i = 1; int j = 1; int k = 1;   const int *pi = &i;// *pi = 0; //error pi为一个指向const int类型的指针 不可以通过对指针解引用修改其所指对象的值  pi = &j; //可以修改该指针的指向   int const *pj = &j;// *pj = 1; //error pj也是一个指向const int类型的指针  pj = &i;  int *const pk = &k; *pk = 0;// pk = &i; //error pk是一个const指针 即不可以修改pk的指向但是可以修改指针所指对象的值
const int *const pi_1 = &i;// pi_1 = &j; //error pi_1是一个指向const int类型的const指针 既不可以修改指向 也不可以修改所指对象的值 // *pi_1 = 0;
int const *const pj_1 = &j;// pj_1 = &i; //error pi_1是一个指向const int类型的const指针 既不可以修改指向 也不可以修改所指对象的值 // *pj_1 = 0;

上述代码定义了三个变量i,j,k.以不同的const修饰对应的指针,此类const指针应当注意对应的位置,要想弄清楚这些声明的含义一般从右向左阅读.

第9-11行也声明了一个指针pj,pj的修饰符为int const *,表明该指针为const类型,其指向的内容为int类型,即pj为一个指向int类型的const指针,也意味着不可以修改该指针的指向,但可以通过该指针修改所指对象的值.

第13-15行声明的指针pk的修饰符为int *const类型,此类指针的解读需要注意的是const默认作用于左边的修饰符,否则作用于右边的修饰符,因此可以看出pk的const作用于指针运算符*,表明pk是一种const指针,所指的内容为int类型,作用同int const*.

对于最后两种指针const int *const和int const *const,同样先观察const左边的内容然后再看右边的内容,可以得出上述两种指针都是指向常量的常量指针.

以上是关于C/C++指针的主要内容,如果未能解决你的问题,请参考以下文章

混合 C/C++ 代码中的结构指针

指向本地结构的指针如何转换为 webassembly?

unity的C#学习——不安全代码(声明不安全代码块:实现C/C++指针的创建与相关操作)

latex在vim中的代码片段

C/C++指针的经典笔试面试题

C/C++指针的经典笔试面试题