几条赋值语句的地址分析

char str1[] = _T("abc")
char str2[] = _T("abc")

结果:str1 != str2
分析:str1和str2是字符数组类型,它们在栈区中获得空间并被用常量"abc"初始化,所以这两个数组的首地址str1和str2的值是不一样的

const char str3[] = _T("abc")
const char str4[] = _T("abc")

结果:str3 != str4
分析:原因同上,区别在于str3和str4是常量字符数组,不能作为左值被赋值

const char* str5 = _T("abc")
const char* str6 = _T("abc")

结果:str5 == str6
分析:常量指针变量str5和str6在被定义的时候就被赋以初值指向常量字符串"abc",但这个常量字符串"abc"在程序中到底是只有一份还是有两份视编译器的优化情况而定,若编译器做了优化,那么一般只有一份常量字符串"abc",而且这个常量字符串"abc"一般会被放在全局数据区,在这种情况下常量指针变量str5和str6的值就相等了.

char* str7 = _T("abc")
char* str8 = _T("abc")

结果:str7 == str8
分析:原因同上,区别在于程序虽然能编译含有 *str7 = _T('1') (将指针变量作为左值进行赋值)的语句,但是运行会出错,因为指针指向的是一个常量字符串,而常量字符串不允许重新被赋值.

程序分为全局数据区,代码区,堆区和栈区四个基本部分.

#include<iostream> #include<string> #include<cctype> using namespace std; #define INFEASIBLE -1 #define OVERFLOW -2 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef char SElemType; typedef char ElemType; struct STACK { SElemType * base; SElemType * top; int stacksize; }; int InitStack(STACK &S); char GetTop(STACK &S); int Push (STACK &S,SElemType e);//插入e为新的栈顶元素 int Pop (STACK &S,STACK &H,int m);//若栈不空,则删除S的栈顶元素 int EmptyStack(STACK &S);//判断栈S是否为空 int cmp(char a,char b);//判断运算符a的优先级是否高于运b void cmp(char a,char b,STACK &f,STACK &h);//判断运算符a和b的优先级 int main() { STACK h1; InitStack(h1);//定义并初始化逆序的逆波兰式栈h1 STACK h2; InitStack(h2);//定义并初始化正序的逆波兰式栈h2 STACK fh; InitStack(fh);//定义并初始化符号栈fh Push(fh,'#');//将#压入符合栈 string z; int a; kind1: cout<<"***************************************"<<endl; cout<<"请输入一个表达式,并以“#”结束:"<<endl; cout<<"***************************************"<<endl; cin>>z; for(int i=0;i<z.size ();i++)//对输入表达式的每个字符进行判断 { if(isalnum(z[i]))//如果当前字符是字母或数字 Push(h1,z[i]);//将当前字符压入逆序的逆波兰式栈h1 else if(z[i]=='(')//如果当前字符是"(" Push(fh,'(');//将当前字符压入符号栈fh else if(z[i]==')')//如果当前字符是")" { while(GetTop(fh)!='(')//一直删除符号栈fh的栈顶元素只至"(" Pop(fh,h1,1); //并将其压入逆序的逆波兰式栈h1 Pop(fh, 、、、、、、、、、、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值