带有数组指针的结构,在 print_stack() 函数中打印“随机数”

struct with a array pointer printing "random numbers" in the print_stack() function

提问人:KalebSUS 提问时间:10/30/2023 最后编辑:chqrlieKalebSUS 更新时间:10/30/2023 访问量:56

问:

我正在训练和研究 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]);
    }
}

我知道有一种更好的方法可以在结构中创建数组,无论如何,我想要一个解决方案来说明我如何在指针数组中打印值以在其他情况下使用它,如果你解释它,它会变得更好:),因为我是编程初学者,我喜欢以艰苦的方式学习它。

我试图获取地址,放入变量,然后再次获取值,但它不起作用。*

数组 C 指针 结构

评论

0赞 pmg 10/30/2023
在你有一个双索引:一次,再一次......因此,要获得这些值,您需要两个取消引用: 或int (*Arr)[10];[10]*printf("%d",pilha->Arr[0][x]);printf("%d",(*pilha->Arr)[x]);
0赞 Chris 10/30/2023
当它被硬编码到程序中时,不确定它的意义是什么。哪。。。避免使用幻数。size
0赞 pmg 10/30/2023
看看这个: ideone.com/ga4SLr
1赞 Chris 10/30/2023
which 有效,因为等价于 which 等价于 。arr[0]*(arr + 0)*arr

答:

2赞 Ted Lyngmo 10/30/2023 #1

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

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

另一种选择是改为:Arrint*

#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;
}

评论

0赞 KalebSUS 10/30/2023
我稍后会测试它,因为我不在电脑上,但感谢您对问题的指导:)
0赞 Ted Lyngmo 10/30/2023
@KalebSUS 不客气!希望它能成功!