这个s.top,该怎么处理
这个s.top在一个栈s中struct stack{Element *baseElement *topint stackSize}int stack_inital(struct
这个s.top
在一个栈s中
struct stack{
Element *base;
Element *top;
int stackSize;
};
int stack_inital(struct stack *s)
{
s->base = (Element *)malloc(sizeof(Element)*MaxSize);
if(! s->base) exit(0);
s->top = s->base;
return 0;
}
求栈的长度时,s.top - s.base;可是s.base 和s.top都表示地址,那么相减怎么是长度呢 c stack base top
[解决办法]相同类型的指针相减,得到对象数组的元素个数,这个有个类型跨度的。
When two pointers are subtracted, both shall point to elements of the same array object,
当两个指针相减时,两个指针必须指向同一个对象数组的元素,
如果两个指针不是指向同一个对象数组,它们相减就没有意义了。
[解决办法]指针的算术运算不同于普通数值的算术运算,例如给一个指针+1,表示在该指针指向的地址的基础上向“前”前进到一个该类型大小的地址,同样-1,表示向后倒退...而一个指针-另一个同类型指针,则会计算出一个两者之间相隔的该类型的元素的间隔数,也就是相差几个元素
[解决办法]参考http://blog.csdn.net/gdmmhym/article/details/6451554
[解决办法]哦,我错了。用这个吧,省得搞不清指针的加减了:
((char*)s.top - (char*)s.base)/sizeof(Element);
[解决办法]
比如说:
A和B二人的家在同一条街上,A的门牌号是3,B的门牌号是10
10-3=7表示A和B的家中间隔了7家。
[解决办法]
指针相减就是把一个指针类型看成一个实体。这个实体内部包含了类型的字节数!!每个实体与实体间的间隔是以类型的字节数为一个单位,你说尾实体于头实体想减是不是得出了他们之间的个数!就想A和B二人的家在同一条街,每家房子亏定是多少平方米,你说A与B之间间隔了多少家房子呢?A与B之间的总面值给出了,长度宽度都是一样的!!哈哈哈
[解决办法]
比如说:
A和B二人的家在同一条街上,A的门牌号是3,B的门牌号是10
10-3=7表示A和B的家中间隔了7家。
不是我找茬
先不说门牌号一般是一侧单号另一侧双号
就算是同一侧吧,“中间隔了”应该是6家,说2家之间的距离是7家倒是没错
隔6家或隔7家之争只是算不算开始那家而已。
有人说1和2隔0,有人说1和2隔1
呵呵,纠结这个干嘛