1

大家好,有人可以告诉我这行代码是做什么的

xdata.yarray[3] = *(ptr++);  
xdata.yarray[2] = *(ptr++);  
xdata.yarray[1] = *(ptr++);  
xdata.yarray[0] = *(ptr++);  

我正在尝试找出其他人的代码,因此如果有人能提供一些有用的指示来解释其他人的代码的最佳方法,那么遇到问题也会不胜感激。

谢谢

如果不是xdata它只是数据,代码的含义会改变吗

4

4 回答 4

3

设置arr为 的初始值,代码将值, , ,ptr填充到元素, ..., -- 即它以相反的顺序复制四个元素的范围。作为副作用,它会修改 的值,使其最终。arr[0]arr[1]arr[2]arr[3]xdata.yarray[3]xdata.yarray[0]ptrarr + 4

请记住,*ptr它与 相同ptr[0],并且表达式*(ptr++)的计算结果相同,但会ptr增加。

于 2012-08-22T15:42:43.680 回答
2

它基本上是将指向 by 的数组指针以相反的顺序复制ptr到 的yarray成员。xdata

于 2012-08-22T15:42:32.133 回答
1

它分配数据并递增指针,以便下一个分配可以使用 指向的下一个值ptr

它简单地等同于:

xdata.yarray[3] = *ptr;  
ptr++;
xdata.yarray[2] = *ptr;  
ptr++;
xdata.yarray[1] = *ptr;  
ptr++;
xdata.yarray[0] = *ptr;  
ptr++;
于 2012-08-22T15:42:21.993 回答
1

关于这段代码的作用,你有很多答案。据推测,处理 ptr 指向的某个数组的内容并将其以相反的顺序存储到结构“xdata”中包含的另一个数组中。

你问你如何自己破解这个问题,这是一个很好的问题,最好的学习方法是自己做。这是我的建议:利用你所知道的,在此基础上创建你自己的小程序,然后查看输出。

例如,在没有看到所有代码的情况下,我知道您有一个包含 4 个元素的数组“yarray”,并且您正在将取消引用指针中的值存储到其中。您可以编写一个如下所示的小程序来查看代码的反应:

void main()
{
    int yarray[4] = {0, 0, 0, 0};
    int my_array[4] = {1, 2, 3, 4};
    int *ptr = my_array;
    int cntr;

    for(cntr = 0; cntr < 4; cntr++)
        printf("then: my_array = %d, and yarray = %d\n", my_array[cntr], yarray[cntr]);

    //Add the code that you're not sure what it does here...
    yarray[3] = *(ptr++);
    yarray[2] = *(ptr++);
    yarray[1] = *(ptr++);
    yarray[0] = *(ptr++);

    //Check out the results!
    for(cntr = 0; cntr < 4; cntr++)
        printf("now: my_array = %d, and yarray = %d\n", my_array[cntr], yarray[cntr]);
}

现在您可以看到代码正在反转 ptr 指向的内容的顺序并将其存储在 yarray 中。

then: my_array= 1, and yarray = 0
then: my_array= 2, and yarray = 0
then: my_array= 3, and yarray = 0
then: my_array= 4, and yarray = 0

now:  my_array= 1, and yarray = 4
now:  my_array= 2, and yarray = 3
now:  my_array= 3, and yarray = 2
now:  my_array= 4, and yarray = 1
于 2012-08-22T16:03:59.577 回答