首页 > 解决方案 > 在 C 中访问时取消引用的指针数组

问题描述

我有一个数组结构,它应该保存一个指向另一个结构的指针。我的结构是这样的:

struct Term{
    char* term;
    int times;
};
typedef struct Term TERM;

struct HeapTer{
    TERM* Term;
    size_t used;
    size_t size;
};
typedef struct HeapTer HEAPTER;

struct Pack{
    HEAPCON* hCon;
    HEAPTER* hTer;
};
typedef struct Pack PACK;

Pack 将只保存我将从结构加载函数返回的两个数组的指针。

我的问题是当我将调用一个函数时,我会将给定的术语插入到咨询术语堆中。

InsertHeapTer(pack->hTer->Term[ind_term],consult->hTer)

其中InsertHeapTer定义为InsertHeapTer(TERM* Ter, HEAPTER *t)。编译器给我以下错误,error: incompatible types when assigning to type 'TERM {aka struct Term}' from type 'TERM * {aka struct Term *}'.

所以,它是说当我使用pack->hTer->Term[ind_term]它时,它给了我 aTERM而不是 a TERM*,即使它被定义为结构中的指针。我做错了什么,为什么会这样?

编辑:重现代码:

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

struct Termo{
    char* termo;
    int vezes;
};
typedef struct Termo TERMO;

struct HeapTer{
    TERMO* Termo;
    size_t usado;
    size_t tam;
};
typedef struct HeapTer HEAPTER;

struct consulta{
    char *Local;
    HEAPTER *hTer;
};
typedef struct consulta CONSULTA;

struct HeapCon{
    CONSULTA* con;
    size_t usado;
    size_t tam;
};
typedef struct HeapCon HEAPCON;

struct Pacote{
    HEAPCON* hCon;
    HEAPTER* hTer;
};
typedef struct Pacote PACOTE;

void InsereHeapTer(TERMO* Ter, HEAPTER *t){
}

int main(){
    PACOTE* pack;
    CONSULTA* consulta;
    int ind_termo=1;

    InsereHeapTer(pack->hTer->Termo[ind_termo],consulta->hTer);

    return 0;
}

void InsereHeapTer(TERMO* Ter, HEAPTER *t){
}

对不起,这是我能做的最小设置。

标签: carrayspointersstruct

解决方案


所以,它是说当我使用pack->hTer->Term[ind_term]它时,它给了我 aTERM而不是 a TERM*

是的。

即使它被定义为结构中的指针。

小心:即使什么被定义为指针?就是pack->hTer->Term这么定义的。既然如此,那么,pack->hTer->Term[ind_term]确实有 type TERM。它相当于*(pack->hTer->Term + ind_term)

这提出了一个解决方案:如果您打算将指针传递给该项目而不是该项目的副本,那么您可以使用指针算法将所需的指针生成为pack->hTer->Term + ind_term. 我倾向于更喜欢它的简单性,但在风格上,我相信有些人会更喜欢等效的表达方式&pack->hTer->Term[ind_term]


推荐阅读