C++ *P[]和(*)P[]有什么区别?

2025-04-10 11:56:53
推荐回答(4个)
回答1:

优先级知道吧·~

这种多个符号的你直接看优先级。。。不然就用括号括起来比较方便观看。

你的例:
*p[] //p首先和[]结合,所以p是一个数组。数组中的元素都是指针

(*)p[] //括号属于同级,那就从左到右,但是()p 没见过这个类型。

估计你是想写 (*p)[]。 //这个就是p先于*结合,所以p是一个指针。指向数组的指针。

回答2:

楼上说的是不对的。没有区别,*和++两个运算符优先级相同,因为是右结合性的运算符,所以p先和++结合,然后再计算*,所以*p++也就等同于*(p++)。这个算式的计算过程:先算括号里的p++,即先返回p的值,然后p自加,与*结合的是括号中返回的值,即p,所以得到p当前指向的值,所以该表达式最后的值应该是p当前指向的值,只不过表达式执行结束后p的值自加了。可以用VC6.0测试一下。

回答3:

if(p)
一个是判断p的指针值是否为0
if(*p)
一个是判断p指向的内存地址中的值是否为0
指针(pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points
to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。在高级语言中,指针有效地取代了在低级语言,如汇编语言与机器码,直接使用通用暂存器的地方,但它可能只适用于合法地址之中。指针参考了存储器中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。
例如:
//参考代码如下:
#include "iostream"
using namespace std;
int main()
{
int a=0,*p=&a;
if(p) cout<<"p为真"<
评论
0
0
加载更多

回答4:

在C++中,*p++和*(p++)没有区别。因为C++编译器认为*和++是同优先级操作符,它们的结合性都是从右至左,这样一来,对于*p++来说,++只作用在p上而不会作用在(*p)上,所以*p++和*(p++)的效果完全一样!