当前位置: 首页 > 编程笔记 >

C++ Primer中&、*符号的多重定义与int *p和int* p的区别讲解

翟冷勋
2023-03-14
本文向大家介绍C++ Primer中&、*符号的多重定义与int *p和int* p的区别讲解,包括了C++ Primer中&、*符号的多重定义与int *p和int* p的区别讲解的使用技巧和注意事项,需要的朋友参考一下

& 和*这样的符号,既能用作表达式里的运算符,也能作为声明的一部分出现,符号的上下文决定了符号的意义:

int i = 42;
int &r = i;    //&紧随类型名出现,因此是声明的一部分,r是一个引用
int *p;       //*紧随类型名出现,因此是声明的一部分,p是一个指针p
p = &i;      //&出现在表达式中,是一个取地址符
*p = i;       //*出现在表达式中,是一个解引用符
int &r2 = *p;  //&是声明的一部分,*是一个解引用符

在声明的语句中,&和*用于组成复合类型;在表达式中,他们的角色又转变成运算符。在不同场景下出现的虽然

是同一个符号,但是由于含义截然不同,所以我们完全可以把他们当做不同的符号来看待。

根据C++Primer介绍:

对于int* p(这种写法合法,但是容易造成误导),其基本数据类型是int,后面的*其实是声明符。在一组公用的数据类型后面可以使用不同的声明符。例如:

int i =1024, *p = &i, &r = i;    //i是一个int类型的数据,p是一个int型的指针,r是一个int型引用。

对于int *p,其和int* p的含义一样,都表示int类型的指针变量p。

但是将声明符紧跟着变量名是一种更容易理解的做法。否则可能会出现误导现象:

例如

 int* p1, p2;表示含义是p1是一个int型的指针,p2是一个int型变量。而不是p1,p2都是指针变量,它们共用的是基本数据类型部分。

如果写成int *p1,p2;则和上式表示的含义完全一样,但是更加清晰,不会造成误导。

不过对于以上两种写法的使用,主要看个人的习惯,但是最好不要混用。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对小牛知识库的支持。如果你想了解更多相关内容请查看下面相关链接

 类似资料:
  • 本文向大家介绍C语言中指针 int *p=0;和int *p;*p=0;和”&“的关系和区别详解,包括了C语言中指针 int *p=0;和int *p;*p=0;和”&“的关系和区别详解的使用技巧和注意事项,需要的朋友参考一下 初学者在学习C语言的时候,最头疼的可能就是指针,话不多说。让我们直接进入正题 直接上代码 直接运行,好了,程序是不是报错了?那就对了。因为此时的int *p=0实际等于in

  • 本文向大家介绍C中的++ * p,* p ++和* ++ p之间的区别,包括了C中的++ * p,* p ++和* ++ p之间的区别的使用技巧和注意事项,需要的朋友参考一下 指针式 在C语言中,* p表示存储在指针中的值。++是前缀和后缀表达式中使用的增量运算符。*是取消引用运算符。前缀++和*的优先级相同,并且两者从右到左关联。后缀++的优先级高于前缀++和*,并且从左到右具有关联性。请参见以

  • 在第一种情况下,我理解为:何时分配(或后续添加?)执行时,p被视为未声明。 但是为什么在一种方法中它是不同的呢?OK t不会被视为未初始化,因为(t=1)是在添加之前执行的。好的,t不是一个字段,但它现在也没有声明! 我能理解吗?要不我就记住这个区别? 也许这也与此有关: 为什么是2?第一个(x=1)以某种方式计算(x未声明!!!),然后返回1,现在x已经赋值了(!?)并且包含1,所以这两个测试。

  • 本文向大家介绍Int 与 Integer的区别?相关面试题,主要包含被问及Int 与 Integer的区别?时的应答技巧和注意事项,需要的朋友参考一下 1、Integer是int的包装类,int则是java的一种基本数据类型  2、Integer变量必须实例化后才能使用,而int变量不需要  3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int

  • 问题内容: 我最近一直在思考定义数组的两种方式之间的区别: 有区别吗? 问题答案: 它们在语义上是相同的。添加该语法只是为了帮助C程序员习惯Java。 更可取,并且不会造成混淆。

  • 问题内容: 当我遇到Joel Spolsky的时候,我正在阅读《更多关于软件的 Joel》,他说了一种有关特定类型的程序员的一些知识,他们知道Java / C#(面向对象编程语言)中an int和an 之间的区别Integer。 那么区别是什么呢? 问题答案: 在Java中, “ int”类型是原始类型,而“ Integer”类型是对象。 在C#中, 类型与值类型相同,并且是值类型(即更像Java

  • 本文向大家介绍c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32的区别详解,包括了c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32的区别详解的使用技巧和注意事项,需要的朋友参考一下 本文对c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32的区别进行了较为

  • 本文向大家介绍详解Java中int和Integer的区别,包括了详解Java中int和Integer的区别的使用技巧和注意事项,需要的朋友参考一下 基本数据类型和引用类型 Java是面向对象的编程语言,一切都是对象,但是为了编程的方便还是引入了基本数据类型,为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是I