函数原形 DataCompare(unsigned char c1,unsigned char c2,unsigned char c3);
unsigned char m_Data[200];
unsigned char *ptr=m_Data;
请问:
{
DataCompare(*ptr,*(ptr+1),*(ptr+2));
ptr+=3;
}
和 DataCompare(*(ptr++),*(ptr++),*(ptr++)); 为什么不一样?请解答,Thanks.

解决方案 »

  1.   

    每++一次它的值也改变一次
    而ptr+1只是表达式的值改了ptr本身的值没改
      

  2.   

    我就是要改变ptr的值呀,如果是这样的话,*(ptr++)应该也是对的。但是不是这样。
      

  3.   

    不一样啊
    ptr+1是这个表达式的值增加了1,但ptr本身的值不变
    如ptr=2,ptr+1=3,但ptr还是2
    ptr++就不一样了,它的表达式的值增加了1,ptr本身的值也变了也加了1
    如ptr=2,ptr+1=3,ptr=3
      

  4.   

    两个都是对的!你可以试试这个!
    #include <stdio.h>void test(unsigned char c1)
    {
    printf("%3X",c1);
    }
    void main()
    {
    unsigned char ch[20];
    unsigned char *data; for(int i=0;i<20;i++)
      ch[i]=i; data=ch;

    for(i=0;i<20;i++)
    {
    test(*(data++));
    }
    printf("\n");
    data=ch; //data已经改变
    for(i=0;i<20;i++)
    {
    test(*(data+i));
    }
    }
      

  5.   

    To ty_star(小鼹鼠) :
    就因为我试了不一样才题问的。我是三个参数,你试试。
      

  6.   

    n(n>1)个参数情况下,进行ptr++时,只有函数运行结束,ptr才会进行改变,
    也就是当ptr=0时,DataCompare(ptr++,ptr++,ptr++)实际上就是
    DataCompare(0,0,0),函数运行后,ptr=3,这就是问题所在。