能力值:
(RANK:410 )
2 楼
DWORD Arry[10];
DWORD NArry;
DWORD dwTmp;
int i;
for (i = 0; i < (int)iCound; i++)
{
dwTmp = *(DWORD*)NArry;
(DWORD*)dwTmp[i] = Arry[i];
}
能力值:
( LV2,RANK:10 )
3 楼
谢谢版主。
我就是对这一前一后的*号搞不清什么意思呢,能帮我解答一下吗?
或者说,在masm中是如何表达的呢?
能力值:
(RANK:410 )
4 楼
xor esi,esi
@@:
mov eax,offset NArry
mov edx,offset Arry
mov eax,[eax] ;eax = *(DWORD*)NArry
mov edx,[edx+esi*4] ;edx = Arry[i]
mov [eax+esi*4],edx
inc esi
cmp esi,iCound
jnz @b
能力值:
( LV9,RANK:170 )
5 楼
记得看数据结构的时候,讲到算式的表达,用栈来实现。
楼主不妨试试:
碰到一个“(”就压栈,碰到“)”就出栈,那么这个“(”和“)”就是匹配的!
不知道说的对不对
^_^
愚见
能力值:
( LV2,RANK:10 )
6 楼
谢谢小虾版本的代码!
实在不好意思,我是刚刚接触C。虽然上面的masm代码我能明白,
可是我还是不清楚象这样一行eax = *(DWORD*)NArry;代码,=号右边是如何计算的。象这样DWORD*的情况,*号在类型右边,我翻遍了手头的C书籍,也没见这样写的。
mov eax,[NArry];就是这个意思吧?以变量NArry中值为地址取DWORD值?
请问,象DWORD*这种情况,和()的使用,分别代表什么意思呢?
另外,alpsdew的回答我没看明白。
能力值:
(RANK:170 )
7 楼
NArray是个指针,指针所指的地方里面存的值也是指针,你这样想就懂了
能力值:
( LV9,RANK:170 )
8 楼
我的意思和楼上的是一样的!
我觉得关键就是那几个括号的理解,我原来的方法是告诉你括号是怎么匹配的。
弄明白之后,先看(dword*),是个强制类型转换,把它后面的内容变成dword型指针;再看(*(DWORD*)(NArry))里的(DWORD*)也是这样的意思,它把NArry强制转换为dword型指针,加上*(可以做“取值”运算符),表示取NArry指向的地址的内容。 我也是个菜鸟^_^
能力值:
( LV6,RANK:90 )
9 楼
改写下程序吧:
DWORD Arry[10], temp;
DWORD* NArray;
NArry = &temp;虽然改变了原意,但助于理解
int i;
for (i = 0; i < (int)iCound; i++)
((DWORD*)(*NArry))[i] = Arry[i];
||
((DWORD*)temp)[i] = Arry[i];
这句应该简单明了了,把temp变量中的值作为一个指针x,从地址x开始的iCound个dword大小的内存赋值
能力值:
( LV2,RANK:10 )
10 楼
呵,谢谢大家,这下我明白了。