30分(不知道者勿扰)---请解释一下: *ptr++ *= y

来源:百度知道 编辑:UC知道 时间:2024/09/22 09:24:19
void mult_array_by_scalar(double x[], int n, double y)
{

double *ptr = x; // point to first element in x
for (int i = 0; i < n; i++) {
*ptr++ *= y;
}
}
请解释一下,这段代码在干什么
我想问的是:
先取*ptr,然后把*ptr乘以y付给*ptr,最后才执行ptr++

凭什么是这个顺序:ptr++为什么不在第二步

解释异常清楚者,50分

void mult_array_by_scalar(double x[], int n, double y)
{

double *ptr = x; // ptr指向x数组
for (int i = 0; i < n; i++) 循环n次
{
*ptr *= y; 给每个数组的元素 * y
ptr++; 指向下一个元素
}
}

也就是说把x数组中的n个元素都给 * y

*ptr是一个指针所指向的值,*ptr++ *= y;就是这个值自己乘于y后又赋值给自己

是把数组X里的前n个元素都赋值为double类型数据y

ptr是个指针,指向数组x的第一个元素,n是数组x中元素的个数,这段代码把数组x中的每个元素都乘以y。(ptr++使指针依次指向x中的每个元素,取*得到相应数据)

*ptr++ *= y;
先取*ptr,然后把*ptr乘以y付给*ptr,最后才执行ptr++

运算符就这顺序吧,我也不太清楚,不过我刚试了下,顺序确实是这样的,就算加上括号(*ptr++ )*= y;结果仍然一样
个人认为,*ptr++这部分的顺序是没问题的,这时*ptr先把数组中的数据取出来了,即使ptr再怎么移动,后面进行的操作都是刚才取出的那个数据