我在培训和研究C中使用的 struct ,但当我试图创建数据 struct 时,我遇到了一个问题,比如打印随机数字.我认为他打印的是这个数组指针中任何数组元素的地址,但我想知道如何修复它,使其通过指向数组的指针来打印值.

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

我知道在 struct 中创建数组有更好的方法,不管怎么说,我想要一个如何打印指针数组中的值的解决方案,以便在其他情况下使用它,如果你解释它,它会变得更好:),因为我是编程初学者,我喜欢用艰苦的方式学习它.

我试图让获取地址,放在变量上,然后再次使*获得值,但它不起作用.

推荐答案

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

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

另一种 Select 是将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;
}

C++相关问答推荐

位屏蔽对于无符号转换是强制的吗?

ATTiny1606定时器TCA 0中断未触发

返回一个包含数组的 struct

在函数中使用复合文字来初始化C语言中的变量

加密解密工作正常,但返回错误0x80090005

SSH会话出现意外状态

CC2538裸机项目编译但不起作用

如何在下面的C代码中正确管理内存?

Vcpkg的配置文件

GTK函数调用将完全不相关的char* 值搞乱

如何在提取的索引中分配空值?

为 struct 中的数组动态分配内存时出错

int * 指向int的哪个字节?

将非连续物理内存映射到用户空间

用于计算位数和的递归C函数

为什么会出现此错误?二进制表达式的操作数无效

当我将偏移量更改为任何非零值时,C中的mmap共享内存出现无效参数错误

cs50拼写器分配中的无限循环

为什么 C 字符串并不总是等同于字符数组?

C23 中是否有 __attribute__((nonnull)) 的等效项?