C에서 표준 스택을 작성하려고했지만 제 stk_size() 함수가 제 32 비트 PC를 제외한 다른 플랫폼에서 작동 할 수 있는지 확실하지 않습니다. 나는 int에 대한 포인터를 던지는 것이 좋지 않다는 것을 읽었다. 하지만 더 나은 구현 방법은 무엇입니까? 나는 "크기"변수를 추가하고 싶지 않다. 내 눈이 과다하기 때문이다. 여기C - 스택에 요소를 가져 오는 int에 대한 포인터
는 소스의 일부입니다 :
#define MAX_STACK_SIZE 100
typedef struct stk stack;
struct stk
{
/* Stack */
int * stk;
/* Pointer to first free element of stack */
int * sp;
};
void stk_init(stack* s)
{
/* Allocate memory for stack */
s->stk = malloc(sizeof(s->stk) * MAX_STACK_SIZE);
/* Set stack pointer to first free element of stack -> 0 */
s->sp = s->stk;
}
int stk_size(stack* s)
{
return ((int) s->sp - (int) s->stk)/sizeof(int *);
}
int main(int argc, char * argv[])
{
stack * s;
stk_init(s);
}
감사합니다!
당신이 캐스팅해야하는 경우, 왜 뺄셈 후 (필요한 경우) 캐스팅하지? –