这是我的第一篇文章,所以如果我做错了或者这是一个糟糕的问题我会道歉。对于我当前的项目,我试图访问一个结构指向的数组。 这是结构:
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和指针访问数组
答案 0 :(得分:2)
感谢大家的时间和帮助。问题最终是我在printf()语句中使用%d而不是%f。
答案 1 :(得分:1)
data
不是数组,而是类型/* pointer to the data array */
的指针(根据您的注释TYPE
),但没有任何数组。 (我怀疑TYPE
是typedef
的{{1}}。您需要在存储值之前分配内存 -
float
答案 2 :(得分:-1)
我相信您应该更改v-&gt; data [0]的类型,可能是*((int *)v-&gt; data [0])或您想要的任何类型。
你们,float和int以非常不同的格式存储......