访问结构中包含的数组

时间:2015-07-07 22:27:59

标签: c arrays pointers struct

这是我的第一篇文章,所以如果我做错了或者这是一个糟糕的问题我会道歉。对于我当前的项目,我试图访问一个结构指向的数组。 这是结构:

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

我认为更改和访问元素的正确方法是:

    v->data[0]=5.0;
    v->data[1]=10.0;
    printf("The value is %d\n",v->data[0]);
    printf("The value is %d\n",v->data[1]);

我得到的是:

该值为1123954688

该值为1123954688

有人会介意我说我做错了什么吗?我在这里环顾四周,但遗憾的是找不到任何帮助。

编辑:感谢您收到我迄今收到的回复。内存分配在项目的其他位置。我选择不包括该项目的所有代码,因为它大约有400行,我认为包含所有代码并不会有帮助,并且需要进行大量的整理。如果有必要,我会这样做。

edit2:这里的代码是精简的。 来自main:

#include <stdio.h>
#include <stdlib.h>
#include "dynamicArray.h"
int main(int argc, char* argv[])
{
    DynArr *dyn;
    dyn = createDynArr(2);
    printf("\n\nTesting addDynArr...\n");
    addDynArr(&dyn, 3);
    addDynArr(&dyn, 4);
}

从实施文件:

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

DynArr* createDynArr(int cap)
{
    assert(cap > 0);
    DynArr *r = (DynArr *)malloc(sizeof( DynArr));
    assert(r != 0);
    initDynArr(r,cap);
    return r;
}
void initDynArr(DynArr *v, int capacity)
{
    assert(capacity > 0);
    assert(v!= 0);
    v->data = (TYPE *) malloc(sizeof(TYPE) * capacity);
    assert(v->data != 0);
    v->size = 0;
    v->capacity = capacity;
}
void addDynArr(DynArr *v, TYPE val)
{
    /* FIXME: You will write this function */
    v->data[0]=5.0;
    v->data[1]=10.0;
    printf("The value is %d\n",v->data[0]);
    printf("The value is %d\n",v->data[1]); 
}

从头文件中:

#include<math.h>

#ifndef DYNAMIC_ARRAY_INCLUDED
#define DYNAMIC_ARRAY_INCLUDED 1


# ifndef TYPE
# define TYPE     double 
# define TYPE_SIZE sizeof(double)
# endif

# ifndef EQ
# define EQ(A, B) (fabs(A - B) < 10e-7)
# endif

typedef struct DynArr DynArr;

DynArr *createDynArr(int cap);
void addDynArr(DynArr *v, TYPE val);

我相信这就是全部。我知道我传递给函数的值不是被赋值的值,我只想弄清楚如何通过stuct和指针访问数组

3 个答案:

答案 0 :(得分:2)

感谢大家的时间和帮助。问题最终是我在printf()语句中使用%d而不是%f。

答案 1 :(得分:1)

data不是数组,而是类型/* pointer to the data array */的指针(根据您的注释TYPE),但没有任何数组。 (我怀疑TYPEtypedef的{​​{1}}。您需要在存储值之前分配内存 -

float

答案 2 :(得分:-1)

我相信您应该更改v-&gt; data [0]的类型,可能是*((int *)v-&gt; data [0])或您想要的任何类型。

你们,float和int以非常不同的格式存储......