84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
小伙看你根骨奇佳,潜力无限,来学PHP伐。
比左右值更重要的问题是:栈中存储的到底是GOBJ还是指向GOBJ的指针?从声明GOBJ* st看你是要存储GOBJ,而从malloc的调用方式上看你又是要存GOBJ*,然后就混乱了。
GOBJ
GOBJ* st
malloc
GOBJ*
如果你要存指针,那么st需要声明成GOBJ** st,malloc也不用强制类型转换了,然后那句入栈就可以用数组记号写成:
st
GOBJ** st
st->st[st->top] = gobj;
提示你st->st + st->top并不是一个合法的左值,st->st + st->top只是一个值,左值应该是一个可以引用的地址。
st->st + st->top
From维基百科
左值具有确定的、可以被获得的内存地址。这意味着左值可以是变量,也可以是对指向特定内存地址的指针解引用(dereference)的结果。例如C语言的表达式(4 + 9),在执行时,计算机生成一个整数值13,但因为程序没有明确指定这个13如何在计算机中存储,所以这个表达式产生一个右值。另一方面,如果一个C程序声明了一个变量x并将x赋值为13,那么表达式(x)的值是13,并且是一个左值。
你要不试试这样
GOBJ *tmp = (GOBJ *)(st->st + st->top); tmp = gobj;
比左右值更重要的问题是:栈中存储的到底是
GOBJ
还是指向GOBJ
的指针?从声明GOBJ* st
看你是要存储GOBJ
,而从malloc
的调用方式上看你又是要存GOBJ*
,然后就混乱了。如果你要存指针,那么
st
需要声明成GOBJ** st
,malloc
也不用强制类型转换了,然后那句入栈就可以用数组记号写成:提示你
st->st + st->top
并不是一个合法的左值,st->st + st->top
只是一个值,左值应该是一个可以引用的地址。From维基百科
你要不试试这样