s.top = s.base + s.stacksize;之前是指针,到最后是怎么完成相加的?

s.top = s.base + s.stacksize;之前是指针,到最后是怎么完成相加的?,第1张

指针是可以参与加减运算的,最简单的例子就是*p++。

一个指针(int *p)加上一个整数n,表示从p指向的地址向后移动n*sizeof(int)个字节,得到的新地址。

s.base相当于上述的int *p,s.stacksize相当喊慎贺于整数n。s.top即得郑派到的新地址。

s.base是栈底指针,s.stacksize是栈长,s.top是栈顶指孝坦针。

S是一并迹猛个结构体, 有一个成员stacksize, STACKINCREMENT可能是个宏, SElemType是一个自定义类型, 可州空能也是结构体。

这句话的意思就是: 两个数相加再乘以一个结构绝桥体大小。

在源程序上增加测试指针,可以看出,test的值的变化,这说明去掉对空间的判断,将引来严重后果。如果型山最大值是22,输入25个测试数据,看看test变化

#include<stdio.h>

#include<stdlib.h>

#define STACK_INIT_SIZE 10 //

#define STACKINCREMENT 10

#define OK 1

#define ERROR 0

#define OVERFLOW -2

typedef struct stack{

int *base

int *top

int stacksize//当前已分配的存储空间,以元素为单位

}SqStack

double *test//测试指针

int InitStack(SqStack &S)

{//构造一个空栈

S.base=(int *)malloc(STACK_INIT_SIZE *sizeof(int))

if(!S.base) exit(OVERFLOW)

S.top=S.base

S.stacksize=STACK_INIT_SIZE

//增加test空间,并显示分配内存地址,记录最大个数

test=(double*)malloc(sizeof(double))

printf("S.base=%p,Smax=%p,test=%p\n",S.base,S.base+S.stacksize,test)

printf("最大个数为:%d\n",(int*)test-S.base)

return OK

}

int GetStack(SqStack S,int &e)

{//弱栈不空,则用e返回S的栈顶元素,并返回OK,否则返回ERROR

if(S.top==S.base) return ERROR

e=*(S.top-1)

// S.top++

return OK

}

int Push(SqStack &S,int e)

{//插入元素e为新的栈顶元素

//if(S.top-S.base>=S.stacksize)//栈满,追加存储空间

//{

// S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int))

/卜耐中/ if(!S.base) exit(OVERFLOW)//存储空间分配失败

// S.top=S.base+S.stacksize

// S.stacksize+=STACKINCREMENT

//}

*S.top++=e

//S.top++

return OK

}

int Pop(SqStack &S,int &e)

{//弱栈不空,则删除栈S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR

if(S.top==S.base) return ERROR

e=*--S.top

return OK

}

int main(void)

{

SqStack S

int stat,i,e,n

stat=InitStack(S)

printf("请输入你要进栈的元素个数n:")

scanf("%d",&n)

*test=3.14

printf("test初值=%lf\n",*test)

for(i=0i<ni++)

{

printf("\n请输入你要进栈的元素e:")

scanf("%d",&e)

stat=Push(S,e)

}

printf("test现在值=%lf\n",*test)

stat=GetStack(S,e)

printf("\n输出出栈亩念的元素:")

for(i=0i<ni++)

{

stat=Pop(S,e)

printf("%3d\n",e)

}

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12199838.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存