c语言将printf输入堆栈
I是最后一个1,I是第一个1,多个参数的堆叠顺序从最后一个开始。因此,
上面输出的结果是,第一行先是I,输出的是2,后面是I,所以还是2;
第二行,先是I,输出1,然后I,输出2;
第三行,先是I,输出是1,然后I,输出还是1,
但是经过这次检索,I经过了2次,1变成了3,所以第四行的输出是3。
堆栈操作,在C语言中?急! # includestdio.h
# includemalloc.h
#定义数据类型int
#定义MAXSIZE 1024
typedef结构
{
DataType datac语言入栈,出栈,入队列的问题 int pop(seqstack *s,char *x) {
If(s-top == 0) {//初始化时,s-top = -1,其中s-top == 0确定堆栈为空且矛盾。
printf(" stack empty \ n ");
return-1;
}
否则{
* x = s-c[s-top];
s-top-;
}
返回1;
}
通常top的位置指的是要推送的空节点,所以当top == 0时,堆栈为空,当top == MAXSIZE时,堆栈为满,所以要修改初始化函数。建议蟹套如下:
seqstack *Initstack(void) {
seq stack * s;
s =(seq stack *)malloc(sizeof(seq stack));
s-top = 0;
返回s;
}
Printf函数参数是堆叠的。 这种现象确实存在,但并不是printf()函数要先执行函数的理由。这可以用下面的代码来测试,证明不是这个原因。
#包括
" stdio.h"//.
(同Internationalorganizations)国际组织
Add1(int
*p){
return(* p = 1);
}
空的
主要(无效){
(同Internationalorganizations)国际组织
a = 1;
printf("[%d]
[%d]\n ",Add1(a),a);
}
这段代码的运行结果是[2]
[1],表示没有先执行函数Add1()。如果你把printf("[%d]
[%d]\n ",Add1(a),a)更改为printf("[%d])。
[%d]\n ",a,Add1(a)),结果是[2]
[2]。这个结果也说明了printf()函数确实是从参数列表的右端执行的。
那么题目中的现象是什么原因造成的呢?这是C/C对数组的处理机制造成的。printf()函数在处理数组时只将数组的第一个地址推送到堆栈上,而不是数组下标变量的所有内容(因为没有必要,所以可以输出第一个地址)。printf()函数在参数表右端开始一个操作,堆栈到最左端的参数时,根据左端的控制符号指令逐个弹出。对于其他变量,值是推入的,原来的计算结果是什么就是弹出来的;题目中的字符串不一样。当压入第一个地址p时,虽然p指向的内容是大小写共存的,但是被strupr(p)改成了大写,但是压入的第一个地址仍然是strupr(p)返回的同一个地址,从这个地址开始的字符串弹出输出时全部是大写的...
不知道我说清楚了吗?备案...
最后更新于 2023-10-13 07:44:40 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章