c - 在 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){
}
对不起,这是我能做的最小设置。
解决方案
所以,它是说当我使用
pack->hTer->Term[ind_term]
它时,它给了我 aTERM
而不是 aTERM*
,
是的。
即使它被定义为结构中的指针。
小心:即使什么被定义为指针?就是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]
。
推荐阅读
- r - 如何改进先知模型
- java - 通过 spring boot 和 java 连接到具有 2 个用户的单个数据库
- javascript - 如果@Input 是一个对象且其属性更新之一,则 OnChanges 不会触发
- ssh - 等待 SSH 的打包程序
- git - 包含版本控制的配置管理工具?
- macos - macOS 将 DNS 服务器设置为默认值
- wordpress - 在 Woocommerce 中的下拉菜单之前移动变量添加到购物车按钮
- c - 多个进程读/写文件。使用什么 API?
- android - FIrebase 数据库编辑错误
- java - Maven Project(Cucumber+TestNG+Selenium-Java] Test Can't Run test on command line with mvn clean install