C语言栈结构体程序未返回peek()值却输出(null)
解决你的C语言栈程序输出(null)问题
嘿,刚学C语言就动手写栈,这点必须给你点个赞!不过你遇到的问题其实是C语言里很常见的值传递陷阱,再加上可能的输出格式错误,咱们一步步来捋清楚:
问题根源分析
值传递导致修改无效
你写的push函数参数是struct stack stack,这意味着函数会创建一个原栈结构体的副本。你在函数里修改的只是这个副本的list和lastelement,主函数里的原栈完全没被改动!这就导致你主函数里的栈其实还是未初始化的状态,输出自然不对。输出格式不匹配(导致(null))
如果你的输出语句用了printf("%s", ...)来打印整数,就会因为格式符不匹配出现(null)——%s是用来打印字符串的,打印整数得用%d。
修正后的完整代码示例
#include <stdio.h> struct stack { int list[256]; int lastelement; }; // 改成指针传递,操作原结构体 void push(struct stack *stack, int newelement) { // 先自增lastelement,再赋值(注意初始化时lastelement要设为-1) stack->lastelement++; stack->list[stack->lastelement] = newelement; } int main() { struct stack a; // 初始化栈:lastelement设为-1,表示当前没有元素 a.lastelement = -1; push(&a, 123); // 传入栈的地址 // 用%d打印整数,访问list[0] printf("list[0]的值是:%d\n", a.list[0]); return 0; }
关键修改点说明
- 指针传递:把
push的参数改成struct stack *stack,调用时传&a(栈的地址),这样函数里的修改会直接作用在原结构体上。 - 成员访问符:指针访问结构体成员要用
->,而不是.,比如stack->lastelement。 - 栈初始化:必须把
lastelement初始化为-1,这样第一次push时自增到0,正好对应list[0]的位置。 - 输出格式符:打印整数用
%d,避免格式不匹配导致的奇怪输出。
现在你再编译运行这个代码,应该就能看到list[0]的值是:123的正确输出啦!
内容的提问来源于stack exchange,提问作者antauf
相关产品推荐
相关产品推荐

