gpt4 book ai didi

c 指向结构体的指针问题

转载 作者:行者123 更新时间:2023-11-30 20:25:08 25 4
gpt4 key购买 nike

以下代码在倒数第二个语句中的箭头处给出了错误。我不知道这是为什么。有人可以告诉我为什么吗?

我不知道从哪里开始。我认为这是正确的,但有一些问题。

      /* 
* File: newmain.c
* Author: user1
*
* Created on May 26, 2015, 4:30 PM
*/

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
/*
*
*/


#ifndef KEYTYPE
#define KEYTYPE char *
#endif

#ifndef VALUETYPE
#define VALUETYPE double
#endif

#ifndef TYPE
#define TYPE struct association
//# define TYPE int
#endif

struct association
{

KEYTYPE key;
VALUETYPE value;

};

struct DynArr
{
TYPE *data; /* pointer to the data array */
//struct association *data;
int size; /* Number of elements in the array */
int capacity; /* capacity ofthe array */
};


int main(int argc, char** argv) {

struct DynArr *da;
da = malloc(sizeof(struct DynArr));


assert(da!= 0);
da->capacity = 2;
da->data = malloc(sizeof(TYPE) * da->capacity);
assert(da->data != 0);
da->size = 0;


if(da->data[0]->key == 2) //test.c:58:10: error: invalid type argument of ‘->’ (have ‘struct DynArr’) <<<<<<<<<<<<<<<<<<

return (EXIT_SUCCESS);
}

最佳答案

您使用了错误的运算符,您的 struct DynArr 实例不是指针,因此您必须使用 . 运算符。

struct DynArr da;
/* This is also wrong because `capacity' has not been initialized yet! */
assert(da.capacity > 0);
/* ^ it's not a poitner */

在所有其他情况下都相同。

当实例是结构体的指针时,例如

struct DynArr  da;
struct DynArr *pda;

pda = &da;
pda->capacity = 0;
/* ^ it's correct here */

编辑:

编辑问题后我可以看到问题

if(da->data[0]->key == 2)

da->data 的类型为 TYPE *,并且您正在取消引用 da->data[0] 中指向其第一个元素的指针>,所以它不再是 TYPE * 类型,即不是指针,所以你需要

if(da->data[0].key == 2)

关于c 指向结构体的指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30470868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com