首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

这个s.top,该怎么处理

2013-09-15 
这个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

引用:
在一个栈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都表示地址,那么相减怎么是长度呢

[解决办法]
引用:
Quote: 引用:

(s.top - s.base)/sizeof(Element); 就得到栈中元素个数。
不需要/sizeof(Element),多此一举

哦,我错了。用这个吧,省得搞不清指针的加减了:
((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之间的总面值给出了,长度宽度都是一样的!!哈哈哈这个s.top,该怎么处理
[解决办法]

引用:
Quote: 引用:

Quote: 引用:

比如说:
A和B二人的家在同一条街上,A的门牌号是3,B的门牌号是10
10-3=7表示A和B的家中间隔了7家。

不是我找茬
先不说门牌号一般是一侧单号另一侧双号
就算是同一侧吧,“中间隔了”应该是6家,说2家之间的距离是7家倒是没错

隔6家或隔7家之争只是算不算开始那家而已。
有人说1和2隔0,有人说1和2隔1

呵呵,纠结这个干嘛

热点排行