我有以下数据结构:
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;
它失败了。它给了我一个甚至不在向量中的值;
我需要一些帮助才能做到这一点。
答案 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倍,因此它的索引将远远超出范围。
所以我怀疑你正在调用未定义的行为。
您需要数组/向量中的元素数,而不是字节数。