在print_stack()函数中使用数组指针打印“随机数”的结构

iqjalb3h  于 2023-11-16  发布在  其他
关注(0)|答案(1)|浏览(91)

我正在训练和学习C中使用的结构,但是当我试图创建一个数据结构时,我遇到了一个问题,就像打印随机数一样,我认为他打印的是数组指针中任何数组元素的地址,但我想知道如何修复它,使打印指向数组的指针的值。

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

//creating a struct for a data structure

typedef struct {
    int size;
    int (*Arr)[10];
    int top;
} Stack;

//function prototype
void print_Stack(Stack *pilha);

int main() {
    Stack pilha;
    int Elementos[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    
    pilha.Arr = &Elementos;
    pilha.size = sizeof(Elementos) / sizeof(int);

    print_Stack(&pilha);
    return 0;
}

//creating a print stack function
void print_Stack(Stack *pilha) {
    for (int x = 0; x < pilha->size; x++) {
        printf("%d", pilha->Arr[x]);
    }
}

字符串
我知道有一个更好的方法来创建一个数组的结构,无论如何,我想要一个解决方案,我如何打印的值在一个指针数组中使用它在另一种情况下,如果你解释它,它会变得更好:),因为我是初学者在编程,我喜欢学习它在困难的方式。
我试图让获取地址,把变量,并使*再次获得值,但它不工作。

drkbr07n

drkbr07n1#

pilha->Arr是一个指向int[10]的指针,所以在打印数组中的值时,需要取消引用它(使用*):

printf("%d", (*pilha->Arr)[x]);
//           ^^^^^^^^^^^^^

字符串
另一种选择是将Arr改为int*

#include <stddef.h>  // size_t
#include <stdio.h>
#include <stdlib.h>

#define ARRSIZE(x) (sizeof (x) / sizeof *(x))

typedef struct {
    size_t size;
    int *Arr;                               // int*
    int top;
} Stack;

void print_Stack(Stack *pilha) {
    for (size_t x = 0; x < pilha->size; x++) {
        printf("%d", pilha->Arr[x]);        // now this works
    }
}

int main() {
    Stack pilha;
    int Elementos[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    pilha.Arr = Elementos;                  // and you assign it like this
    pilha.size = ARRSIZE(Elementos);

    print_Stack(&pilha);
    return 0;
}

相关问题