这是我的第一篇文章,所以如果我做错了什么或者这是一个不好的问题,我深表歉意。对于我当前的项目,我正在尝试访问结构指向的数组。 这是结构:
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:这是精简后的代码。 来自主要:
#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);
我相信这就是全部。我知道我传递给函数的值不是正在分配的值,我只是想弄清楚如何通过结构和指针访问数组
最佳答案
感谢大家的时间和帮助。问题最终是我在 printf() 语句中使用 %d 而不是 %f。
关于c - 访问结构体中包含的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31280442/