C指针使用栈的问题

C语言 码拜 4年前 (2017-05-08) 943次浏览
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX 20
#define CAPACITY 20
typedef double digitType;
struct stack
{
    int top;                 //栈顶指针
    void*  stack[CAPACITY]; //操作数为digitType型,操作符为char型
};
typedef struct stack STACK;
STACK S;                                      <--这里是1号位置
void menu();
void insert(STACK* S, void* input);
void* pop(STACK* S);
void printAll(STACK *S);
int isoperator(char charac);
void midTransPoli(STACK* S, char* trans);
void reversePolishNotation(STACK *S,char* haha);
#include "head.h"
int main(int argc, char* argv[])
{
	int choice;
	char trans[MAX];
	int i = 0;

	S.top = 0;
	do{
		menu();
		printf("选项:");
		scanf("%d", &choice);
		getchar();
		switch(choice)
		{
			case 1:
				midTransPoli(&S, trans);		<--这里是2号位置
				break;
			case 2:
				printf("****\n");
				reversePolishNotation(&S,trans);    <--这里是3号位置
				break;
			case 0:
				break;
		}
	}while(choice != 0);
	return 0;
}

上述代码成功运行。
问题:
1号位置若使用  STACK* S; 且 2号、3号参数列表改为 xxxx(S, xxx);则编译时通过,运行时出现段错误(刚运行就出现)
[1]    4364 segmentation fault  ./main
这是为何?
假如想使用指针栈应该怎么使用?

解决方案

20

若那样,S仅仅是一个指针,指向 struct stack类型的变量,但是指向什么地方,没有赋值确定。后来通过S往它所指的变量字段内存取数据,到底是哪里呢

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C指针使用栈的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)