gpt4 book ai didi

c - 将 char 存储在整数数组中

转载 作者:行者123 更新时间:2023-11-30 14:46:34 25 4
gpt4 key购买 nike

我对这个程序有一些疑问,这里我们创建整数数组并将字符存储在其中

THINK IN CASE WHEN WE WRITE THE INFIX TO POSTFIX PROGRAM, SAME STACK OPERATION FUNCTION WILL BE USED THERE

我们将把括号和操作数存储在栈中,我想问stack->array中是否存储了ASCII值为什么不需要类型转换由于整数需要 4 字节内存,那么如何将 1 字节 char 存储在该数组中,不仅存储,而且我们如何使用该整数数组访问所有 char 变量,因为根据指针算术 *(array+i)如果数组是指向整数的指针,则将领先 4 个字节

#include <stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>

// Stack type
struct Stack
{
int top;
unsigned capacity;
int* array;
};

// Stack Operations
struct Stack* createStack( unsigned capacity )
{
struct Stack* stack = (struct Stack*) malloc(sizeof(struct Stack));

if (!stack) return NULL;

stack->top = -1;
stack->capacity = capacity;
stack->array = (int*) malloc(stack->capacity * sizeof(int));

if (!stack->array) return NULL;

return stack;
}

int isEmpty(struct Stack* stack)
{
return stack->top == -1 ;
}

char peek(struct Stack* stack)
{
return stack->array[stack->top];
}

char pop(struct Stack* stack)
{
if (!isEmpty(stack))
return stack->array[stack->top--] ;
return '$';
}

void push(struct Stack* stack, char op)
{
stack->array[++stack->top] = op;
}


// The main function that returns value of a given postfix expression
int evaluatePostfix(char* exp)
{
// Create a stack of capacity equal to expression size
struct Stack* stack = createStack(strlen(exp));
int i;

// See if stack was created successfully
if (!stack) return -1;

// Scan all characters one by one
for (i = 0; exp[i]; ++i)
{
// If the scanned character is an operand (number here),
// push it to the stack.
if (isdigit(exp[i]))
push(stack, exp[i] - '0');

// If the scanned character is an operator, pop two
// elements from stack apply the operator
else
{
int val1 = pop(stack);
int val2 = pop(stack);
switch (exp[i])
{
case '+': push(stack, val2 + val1); break;
case '-': push(stack, val2 - val1); break;
case '*': push(stack, val2 * val1); break;
case '/': push(stack, val2/val1); break;
}
}
}
return pop(stack);
}

// Driver program to test above functions
int main()
{
char exp[] = "231*+9-";
printf ("Value of %s is %d", exp, evaluatePostfix(exp));
return 0;
}

最佳答案

char是机器可以包含基本字符集的最小可寻址单元。 它是一个整数类型。实际类型可以是有符号的或无符号的。它包含 CHAR_BIT 位。

它的大小几乎总是小于 int 的大小。因此,char 可以轻松存储在 int 中。

how we can access all char variables using that integer array because according to pointer arithmatic *(array+i)will be 4 byte ahead if array is pointer to integer

这是可能的,因为当您将 char 存储到 int 中时,您是以 int 大小的间隔存储它们的。由于 top 是一个 int,因此对其进行指针算术 (++) 会将其地址值增加 int 的大小。

stack->array[++stack->top] = op;

这也是您检索 char 时发生的情况。 top(--) 上的指针算术会将其地址值减少 int 的大小。

return stack->array[stack->top--] ;

所以它可以正常工作。

关于c - 将 char 存储在整数数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52162372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com