char* aa=(char*)malloc(2);
*aa++=33;
结果是,先给*a赋33,然后再++。下面是汇编代码:
56: *aa++=33;
00401035 mov eax,dword ptr [ebp-4]
00401038 mov byte ptr [eax],21h
0040103B mov ecx,dword ptr [ebp-4]
0040103E add ecx,1
00401041 mov dword ptr [ebp-4],ecx
[ebp-4]是给局部量分配空间。21h无疑是33啦。
另有坑爹问题一个:
函数声明是void (*intra_satd_x3_8x8c) ( uint8_t *fenc, uint8_t *fdec , int res[3] );
而 int satdu[4], satdv[4];
h->pixf.intra_satd_x3_8x8c( p_srcc[0], p_dstc[0], satdu );//计算satd
回去查书,才发现传递数组时,形参的数组大小是不检查的,爱多少多少,只是传个地址而已。
另有:
h->fref0[h->i_ref0++] = h->frames.reference[i];
这句,实际上是先执行h->fref0[h->i_ref0]= h->frames.reference[i],这后再h->i_ref0++,原理同上
来源:https://www.cnblogs.com/yurius/archive/2013/02/24/2924156.html