gpt4 book ai didi

c - 为什么把变量的地址赋给指针是错误的?

转载 作者:太空宇宙 更新时间:2023-11-04 06:21:55 25 4
gpt4 key购买 nike

我想找出我的代码有什么问题。我有这段代码,所有内容都已正确包含,但编译器说 Symbol 'b_t' could not be resolved:

#ifndef slow_CAL_H
#define slow_CAL_H

/* slow Struct data */
typedef struct slow_struct_tag {
const int16_T b_t[7];
} slow_struct_type;

extern const slow_struct_type slow_struct;
extern const slow_struct_type *slow_struct;
#endif

slow_private.h

#ifndef slow_private_h_
#define slow_private_h_
#include "slow_cal.h"

#endif

慢.c

#include "slow.h"
#include "slow_private.h"

int main() {
foo(&b_t[0]);
return 0;
}

void foo(int16_T *pY) {
*pY++;
}

这个foo()不是真正的函数,真正的函数如下:

void INTERPOLATE_S16_S16_ZERO(int16_T *pY, int16_T yL, int16_T yR,
int16_T x, int16_T xL, int16_T xR)
{
int32_T bigProd;
int16_T yDiff;
int16_T xNum;
int16_T xDen;
*pY = yL;

/* If x is not strictly between xR and xL
* then an interpolation calculation is not necessary x == xL
* or not valid. The invalid situation is expected when the input
* is beyond the left or right end of the table. The design is
* that yL holds the correct value for *pY
* in invalid situations.
*/
if ((xR > xL) && (x > xL) ) {
xDen = xR;
xDen = (int16_T)(xDen - xL);
xNum = x;
xNum = (int16_T)(xNum - xL);
yDiff = yR;
yDiff = (int16_T)(yDiff - yL);
bigProd = yDiff * xNum;
yDiff = div_s16s32(bigProd, (int32_T)xDen);
*pY = (int16_T)(*pY + yDiff);
}
}

但是,我不想发布包含五六个不同文件的困惑代码。

最佳答案

b_tslow_struct_type成员,因此您首先需要一个 slow_struct_type 类型的对象,然后再进行任何操作b_t 可以存在。

即便如此,您仍会通过包含它的对象来引用 b_t,即

  • x.b_t 如果 xslow_struct_type 类型,或者
  • x->b_t 如果 xslow_struct_type* 类型。

之后,您将不得不用不同的类型修复 slow_struct 的多个声明:

extern const slow_struct_type slow_struct;
extern const slow_struct_type *slow_struct;

你不能同时拥有两者:要么 slow_structconst slow_struct_type *,要么是 const slow_struct_type,但不能两者兼而有之。

关于c - 为什么把变量的地址赋给指针是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33262393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com