请问C语言中 *x++ (*x)++ ++*x *++x的区别
先比较++和*(指针)的优先级,++较高。
那么*x++就是取x指向内存的值,然后x+=1;
(*x)++是x指向内存的值,然后其内存的值自增1。
++*x 是x指向内存的值先自增1,在取该值。
*++x 是x先+=1,在取其指向内存的值。
++跟*的优先级一样,两个若一起出现,运算顺序是从右往左(不是常规的从左往右),所以++*x即++(*x)是先取x的值,然后让值自己加1;(地址没变,指针指向的值变了。)
*++x即*(++x),先让x的自己加1,就是x的地址加上这个指针类型的步长(比如说这个指针是int类型,那它的地址+4,),然后再取x的值。(地址变了,但是值没变)
扩展资料:
基本数据类型
void:声明函数无返回值或无参数,声明无类型指针,显示丢弃运算结果。(C89标准新增)
char:字符型类型数据,属于整型数据的一种。(K&R时期引入)
int:整型数据,表示范围通常为编译器指定的内存字节长。(K&R时期引入)
float:单精度浮点型数据,属于浮点数据的一种。(K&R时期引入)
double:双精度浮点型数据,属于浮点数据的一种。(K&R时期引入)
Bool:布尔型(C99标准新增)
Complex:复数的基本类型(C99标准新增)
Imaginary:虚数,与复数基本类型相似,没有实部的纯虚数(C99标准新增)
Generic:提供重载的接口入口(C11标准新增)
类型修饰关键字
short:修饰int,短整型数据,可省略被修饰的int。(K&R时期引入)
long:修饰int,长整型数据,可省略被修饰的int。(K&R时期引入)
long long:修饰int,超长整型数据,可省略被修饰的int。(C99标准新增)
signed:修饰整型数据,有符号数据类型。(C89标准新增)
unsigned:修饰整型数据,无符号数据类型。(K&R时期引入)
restrict:用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。
参考资料来源:C语言-百度百科
那么*x++就是取x指向内存的值,然后x+=1;
(*x)++是x指向内存的值,然后其内存的值自增1。
++*x 是x指向内存的值先自增1,在取该值。
*++x 是x先+=1,在取其指向内存的值。
*++x即*(++x),先让x的自加1,就是x的地址加上这个指针类型的步长(比如说这个指针是int类型,那它的地址+4,以此类推),然后再取x的值。(地址变了,但是值没变)
注意的是x代表的是指针,指针即地址,*是取值符,*x就是取指针x里存的值