1、就其本质来讲是 说明指针加1 在内存中移动几个字节 例如int *pInt; pInt++就是指针位置加1 指针在内存中移动4个字节 char * pChar; pCHar++也是指针位置加1 指针在内存中移动1个字节short *pShort; pShort++ 移动两个字节float 是4 double8。
2、内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。 内存是由内存芯片、电路板、金手指等部分组成的。
楼主把它复杂化了,无非就三个问题,第一*p++是先输出*p的值,然后指针指向下一个数,也就是指针加1。第二,*++p,这个最好用括号改成*(++p)没必要玩这种游戏,这样是先让指针指向下一个数,然后输出这个数,第三个是*p+1,这个是把指针对应的数加1,然后输出,但是原来那个数的值不变,指针所指的数也不变,比如原来指针是指向a[0]=1,通过那个运算后,指针还是指向a[0],且值还是为1
也就是说你的理解是正确的
不过指针加1和移动一个位置还是一样的
说实话 楼主我没看懂你的输出 不过你确实搞复杂了
*p+1 指针地址不变 所指地址内容部变 只是这个表达式返回的值+1
*p++ 因为++高于*所以先执行++ 由于++后置所以先使用p 等同于 *p ;++p;
*++p 因为++前置所以 p已经指向了下一个地址 然后再取这个地址内的内容 相当于 ++p;*p;
*(p+1)搞清楚这个 这个值是a[1]的值 但是p指针并不会移动仍然指向a[0]
楼主在复习复习吧 谭浩强的书里面讲得很详细
针对编译器不同 移动不同 VC里面 int都是4个字节 有些编译器是2个字节
主要涉及运算符的优先级与结合性,还有间接运算符*的用法。前两个理解正确 。关于*p+1,*的优先级比+的优先级高,先算*p,获得指针指向的变量值,然后该值加1输出,指针位置没有改变
(1)、(2)的理解没问题,(3)的理解好像有点问题。*p+1虽然结果为4,但是如果此时的情况是p还是指向3,这个表达式实现的功能是将p指向的内存单元的内容+1,也就是3+1=4。按照你理解的情况,语句应该改成*(p+1)。