C++指针变量不能使用++运算符吗?

#include<iostream>int main(){ using namespace std; int updates = 6; int * p_updates; p_updates = &updates; cout << "updates\t" << updates << endl << "* p_updates" << *p_updates << endl << "&updates" << &updates << endl << "p_updates" << p_updates << endl; *p_updates= *p_updates+1; cout << "*p_updates+1\n";///////////////////////?????? cout << *p_updates << "\t\t\t" << updates << endl; *p_updates++; cout << "*p_updates++\n";//////////////////////////////?????? cout << *p_updates<< "\t\t\t"<< updates << endl; return 0;}程序在上,运行结果如图,请问为什么*p_updates+1是有效的而*p_updates++就没有效果呢

普通指针可以进行++、--运算,常指针不行,指向函数的指针也不行。如有:int a[10],*p=a;,则p++、++p、p--、--p都是合法的,而a++、++a、a--、--a不行,因为a是数组名,是常指针;被const修饰的常指针也不能进行++、--运算,如有int x,*const q=&x;,则q也不能再指向别处,q++、++q、q--、--q都是
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-09-19
new int;//开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针)   
new int(100);//开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址   
new char[10];//开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址   
new int[5][4];//开辟一个存放二维整型数组(大小为5*4)的空间,返回首元素的地址   
float *p=new float (3.14159);//开辟一个存放单精度数的空间,并指定该实数的初值为//3.14159,将返回的该空间的地址赋给指针变量p   
new运算符使用的一般格式为   new 类型 [初值]   用new分配数组空间时不能指定初值。如果由于内存不足等原因而无法正常分配空间,则new会返回一个空指针NULL,用户可以根据该指针的值判断分配空间是否成功。
delete运算符使用的一般格式为   delete [ ] 指针变量   
例如要撤销上面用new开辟的存放单精度数的空间(上面第5个例子),应该用   delete p;   
前面用“new char[10];”开辟的字符数组空间,如果把new返回的指针赋给了指针变量pt,则应该用以下形式的delete运算符撤销该空间:
delete [] pt;//在指针变量前面加一对方括号,表示是对数组空间的操作   
例 开辟空间以存放一个结构体变量。   
#include <iostream>   
#include <string>   
using namespace std;
struct Student //声明结构体类型Student
{
string name;
int num;
char sex;
};
int main( )   
{
Student *p; //定义指向结构体类型Student的数据的指针变量
p=new Student; //用new运算符开辟一个存放Student型数据的空间
p->name=″Wang Fun″; //向结构体变量的成员赋值
p->num=10123;
p->sex='m';
cout<<p->name<<endl<<p->num<<endl<<p->sex<<endl;//输出各成员的值
delete p;//撤销该空间
return 0;   
}   
运行结果为   Wang Fun 10123 m
第2个回答  2019-09-19
类型相同的两个指针变量不能进行加法运算,但能进行减法运算。还能用‘<’、‘>’、‘==’这三个运算符进行比较,主要用于判断指针指向数组元素的先后位置。
第3个回答  2019-09-19
应该是优先权问题, "*"的优先权, 要比後置"++", 来得低. 所以++先跑, 才做*. 导致读错位置.
所以可以考虑用 (*p_updates)++;来取代本回答被提问者采纳
第4个回答  2019-09-19
运算符的优先级导致
*p_updates+1 ==>取地址中的值来加1
*p_updates++ ==>地址加1后的值

C++中a是一个char指针 如果char*a="bcd" *++a与*a++以...
a++和*(a++)是一样的,++优先级高于* ,所以a是和++连在一块的,和有没括号没关系,因为是后++,所以a在这个表达式中的值是它的当前值,在这个表达式求值完毕后,才执行a=a+1,这个次序和优先级是两回事 同样的道理*++a和*(++a)也是一回事,前++的特性使得a在这个表达式中的取值是a自增一...

C++中各类运算符的优先级
在C++中,运算符的优先级和结合方向对表达式的计算结果至关重要。各类运算符的优先级可以按照以下直观的顺序理解:首先,括号([]())的运算优先级最高,它们用于界定和改变运算的范围,然后是成员运算符(.和->),用于访问对象的属性和方法。其次,单目运算符(++、--、+\/-、指针运算*、&)占据第...

C++程序简单指针问题,为什么 *p ++ 算出来的不是 6而是5???_百度知 ...
无论是*p ++还是*(p++),其中的++都是作用在p上的而不是作用在*p上的,这是由++结合性质决定的。只有(*p)++中的++才会作用在*p上。我想我已经说清楚了……

对于基类型相同的两个指针变量之间,不能进行的运算是 A) < B) = C...
类型相同的两个指针变量不能进行加法运算,但能进行减法运算。还能用‘<’、‘>’、‘==’这三个运算符进行比较,主要用于判断指针指向数组元素的先后位置。可以比较谁的位置在前,谁的位置在后,就是谁是低地址,谁是高地址,一般来说,对数组才有可能用到如 p1=&s[0] ,p2=&s[5];那么p1在p2...

C语言指针中的++p与++*p的区别
这个是要考虑到右结合性测问题了,因为++和*是同一级别的运算符,而且是右结合的,就是在执行C语句的时候从右到左运算...另外呢,++P和P++也是不同的,++P是前++,例如a=++P;是先让P+=1,然后赋给a,而a=P++是后加加,是先把P的值赋给a,然后执行P+=1...++P是另P+=1,而++*P是取到*P的值,然后P...

请问for循环中的s++;写法是不是错误的?
我认为没错,只要你以一维数组名做实参,即s=array[0],s是指针变量,++运算符用于变量是没问题的

C语言中括号和++的优先级问题
自增运算符分为前缀形(++a)和后缀形(a++),其本质是改变变量的值,然后返回该变量的原始值。部分开发者认为,前缀形式是先++再使用(先变后用),后缀形式是先使用再++(先用后变)。然而,自增运算符只能作用于变量,而不能作用于变量或表达式,如(i+j)++ 是非法的。分析代码示例,`int a...

c++中++什么意思?
c语言里++是自增运算符,表示自加的意思,有如下两种用法:假如定义了一个变量i=1 1) 若使用i++, 指代先取i的值再另i=i+1 2)若使用++i,指代先使i=i+1再取i的值 ++在前是先给变量的值自加,及自身加一,再用变化后的值去参与运算。而++在后,则是先用原来的值参与运算,遇到...

C++中 ++(a++)为什么错误
所以不可以。C++中的“++” (自增)、 “--” (自减)运算符是使用方便且效率很高的两个运算符,它们都是一元运算符。这两个运算符都有前置和后置两种使用形式。当“\/”用于两整型操作数相除时,其结果取商的整数部分,小数部分被自动舍弃。因此,表达式1\/2的结果为0,这一点需要特别注意。

指针和引用的自增(++)运算意义不一样?
指针与引用看上去完全不同(指针用操作符“*”和“->”,引用使用操作符“. ”),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢? 首先,要认识到在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并...

相似回答