1.对于(*t)++,这个运算过程是,先取出地址t位置上的值,然后再将这个值加1。注意:要是用这个表达式向一个变量赋值的话,++是没有意义的,因为++过程是最后完成(即赋值过后)。
2.对于*(t++),运算过程也是先取出地址t位置上的值,让后再让地址t的值加1。如有赋值,则也是最后完成++步骤。
两个表达式的区别是在于括号的存在,导致++这个过程的的对象不一样。
像这些问题,我觉得你应该自己动手,写个小检验程序,自己验证一下,得出答案,理解也更加深刻一些。
下面的问题,A循环判断标志是while(*S),到s的结束符时候,就false了,跳出了循环,么有完成最后这一个结束符的赋值过程,所以错了。
两个运算符优先级相同,但两个运算符都是右运算符,所以在右边的++号会先运算,结果就是*(t++)了。但t++的返回值是原来的t值,所以这种用法的意思是,求当前t位置的值,然后将t往后移一位,用于遍历数组的元素值。
先++后*
参考我的回答http://zhidao.baidu.com/question/532236771?&oldq=1
以下不能将s所指字符串正确复制到t所指存储空间的是()
A.do(*t++=*s++;}while(*s);
B.for(i=0;t[i]=s[i];i++);
C.while(*t=*s){t++;s++;}
D.for(i=0;j=0;t[i++]=s[j++];);
答案是A,没错,t中没有添加'\0'字符
A选项应该是在do(*t++=*s++;}while(*s);后加一句*t='\0';
*t++=*(t++)=(*t)++ 都是先用*t 在t++;