C指针和函数

C指针和函数,c,pointers,C,Pointers,可能的重复项: 嗨 我正在运行以下程序 void print(int *a, int *b, int *c, int *d, int *e) { printf("\n %d %d %d %d %d",*a,*b,*c,*d,*e); } int _tmain(int argc, _TCHAR* argv[]) { static int arr[] = {97,98,99,100,101,102,103,104}; int *ptr=arr+1; prin

可能的重复项:

我正在运行以下程序

void print(int *a, int *b, int *c, int *d, int *e)
{

    printf("\n %d %d %d %d %d",*a,*b,*c,*d,*e);
}

int _tmain(int argc, _TCHAR* argv[])
{

    static int arr[] = {97,98,99,100,101,102,103,104};
    int *ptr=arr+1;
    print(++ptr,ptr--,ptr,ptr++,++ptr);
    getchar();
    return 0;
}

我以为我会得到
999998100
作为输出,但我得到
10010099100
作为输出。我不明白为什么。与++或--(前置或后缀)运算符一起使用时,指针的行为是否与普通变量不同。你能帮我了解一下程序是如何工作的吗?你在没有序列点的情况下多次阅读和修改
ptr
。这是未定义的行为。编译器可以发出它感觉像的任何代码。不要这样做

还请注意,函数参数的求值顺序没有定义,因此您的
print
语句即使定义良好,也不一定会输出您认为会输出的结果


有关类似问题,请参见此问题。

前面提出的类似问题,请参见中的第4点。