提问人:KalebSUS 提问时间:10/30/2023 最后编辑:chqrlieKalebSUS 更新时间:10/30/2023 访问量:56
带有数组指针的结构,在 print_stack() 函数中打印“随机数”
struct with a array pointer printing "random numbers" in the print_stack() function
问:
我正在训练和研究 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]);
}
}
我知道有一种更好的方法可以在结构中创建数组,无论如何,我想要一个解决方案来说明我如何在指针数组中打印值以在其他情况下使用它,如果你解释它,它会变得更好:),因为我是编程初学者,我喜欢以艰苦的方式学习它。
我试图获取地址,放入变量,然后再次获取值,但它不起作用。*
答:
2赞
Ted Lyngmo
10/30/2023
#1
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;
}
评论
0赞
KalebSUS
10/30/2023
我稍后会测试它,因为我不在电脑上,但感谢您对问题的指导:)
0赞
Ted Lyngmo
10/30/2023
@KalebSUS 不客气!希望它能成功!
评论
int (*Arr)[10];
[10]
*
printf("%d",pilha->Arr[0][x]);
printf("%d",(*pilha->Arr)[x]);
size
arr[0]
*(arr + 0)
*arr