C语言中用指针表示数组和用数组名表示数组的区别? 100

/*这段代码的目的是将逆波兰表示的计算器实现。其中函数getch()的目的是读取输入的文本流中的字符,ungetch()函数将判断时多读出来的字符再压回栈内。问题是:我在... /*这段代码的目的是将逆波兰表示的计算器实现。

其中函数getch()的目的是读取输入的文本流中的字符,
ungetch()函数将判断时多读出来的字符再压回栈内。
问题是:我在ungetch()函数中表示栈的声明是int *cpointer。但是这样做,在计算浮点数的时候就不正确,如果改为int cpointer[ ]。那么就正确了。请问,用指针表示数组和用数组名有什么副作用的区别么?
请大师指点~~!*/

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#define NUMBER '0'
void ungetch(char c);
int getch();
int getop(char *s);
void push(double number);
double pop();
/*以上为声明说明部分*/
main()
{
char *s,c;
double op_temp;
while((c=getop(s))!=EOF)
{
switch(c)
{
case NUMBER :
printf("NUMBER:%s\n",s);
push(atof(s));
break;
case '+' :
push(pop()+pop());
break;
case '-' :
op_temp=pop();
push(pop()-op_temp);
break;
case '*' :
push(pop()*pop());
break;
case '/' :
if((op_temp=pop()));
push(pop()/op_temp);
break;
case '\n':
printf("result=%.8g\n",pop());
break;
default :
printf("error,unknown %c\n",c);
break;
}
}
}
/*分析文本流部分*/

int getop(char *s1)
{
char c;
int i=0;
while((c=getch())==' '||c=='\t')
;
s1[i]=c;
if(!isdigit(c))
{
i=0;
return c;
}
while((c=getch())!=EOF&&c!='\n')

{
if(isdigit(c))
{ s1[++i]=c;
s1[i+1]='\0';
}
else
{
if(c=='.')
{
s1[++i]=c;
continue;
}
else
{
ungetch(c);
s1[++i]='\0';
return NUMBER;
}
}
}
return c;
}
/*获取字符和回退字符部分*/

/*对缓存栈中的字符数不加限制*/
int cpointer[100];/*如果这里改为 int *cpointer ,计算浮点时就会出错*/
int c_count=0;
int getch()

{
return (c_count>0) ? cpointer[--c_count] : getchar();
}
void ungetch(char c)
{
cpointer[c_count++]=c;
}
/*进出栈部分*/

double *number_stack;
int n_count=0;
void push(double number)

{
number_stack[n_count++]=number;
}
double pop()

{
if(n_count>0)
return number_stack[--n_count];
else printf("error of pop");
}
展开
 我来答
八千汉字
2014-11-28 · TA获得超过189个赞
知道小有建树答主
回答量:312
采纳率:100%
帮助的人:189万
展开全部
如果你是说你注释那里
改成
int *cpointer;
int c_count = 0;
如果是这样的话 那就是 cpointer并没有具体指向的空间
换成
int arr[100];
int *cpointer = arr;
int c_count = 0;
这样就好了 指针有了具体的指向了
追问
谢谢回复!
指针没有初始化具体指向的时候,会容易出现寻址错误么?我习惯于使用char *p来表示一个数组,因为这种方式不需要固定数组的长度。
另外下面也有个函数pop和push,这两个的缓存栈也是用的指针:
double *number_stack;
/*这里使用指针的时候,就没有出错,这里的寻址计算会比上面的ungetch要频繁*/
名很难记
2014-11-28 · 超过31用户采纳过TA的回答
知道答主
回答量:69
采纳率:100%
帮助的人:42.6万
展开全部
 s=(char *)malloc(100*sizeof(char));/*主函数内 改为-<后没有报错,但不是很懂你的代码怎么测试*/
 if(isdigit(c)){s1[++i]=c;s1[i+1]='\0';}//某函数内
  /*原 主函数只申请了一个指针s 且没有分配内存 现在却将其当成数组使用,没问题么? 个人观点,我也不是很懂*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式