中间的任何类型的矢量

时间:2013-03-04 11:40:20

标签: c

我有以下数据结构:

typedef struct {
      size_t d; /* dimension of elements*/
      TFComp fid; TFComp ord; /* fid and ord are some comparation functions*/
      char *v, *s, *t; /* v points to the starting point of vector; s points to end of usable area of vector; t points to the end of available area */
      } TMultime;

和声明:

TMultime *m;

char *p=m->v; /* starting point */
char *q=m->s;  /* end of usable area of vector */

让我们说m->d = sizeof(int);

我想找到这个向量的中间部分;

我试过*middle = p + (q - p)/2 * m->d;

它失败了。它给了我一个甚至不在向量中的值;

我需要一些帮助才能做到这一点。

2 个答案:

答案 0 :(得分:2)

(让我们忽略可能的可移植性问题)

指向数组物理中间的指针是

char *m = p + (q-p)/2;

因为p和q是指向char的指针。但要注意:表达式计算char数组的中间值! 获取指向大小块中间的指针  m-> d,表达式为:

char *m = p + ((q-p)/(2*m->d))*m->d;

答案 1 :(得分:1)

此:

*middle = p + (q - p)/2 * m->d;

取两个char指针之间的差异,除以2,然后乘以实际类型的大小。

一般来说,int的大小至少是char的4倍,因此它的索引将远远超出范围。

所以我怀疑你正在调用未定义的行为。

您需要数组/向量中的元素数,而不是字节数。