【问题标题】:Inialization makes pointer without a cast [closed]初始化使指针没有强制转换[关闭]
【发布时间】:2017-11-14 11:21:17
【问题描述】:

我是 C 编程的新手,我尝试阅读类似的问题,但我无法解决我的特定问题。

我有这个小函数,它返回一个指向 g_Uart0RxBuf 数组的指针:

uint8_t* R_UART0_getBuffer()
{
   uint8_t* pointer_to_buffer;
   pointer_to_buffer = &g_Uart0RxBuf[0];
   return pointer_to_buffer;
}

在调用函数中我这样做:

uint8_t* pointer;              //Define pointer variable
pointer = R_UART0_getBuffer(); //Should return a pointer to an uint8_t

老实说,我不明白为什么我需要演员才能完成这项工作。不强制转换就不行吗?

非常感谢,我很抱歉提出这样一个菜鸟问题。

【问题讨论】:

  • g_Uart0RxBuf的类型是什么?
  • 你到底在哪里使用铸造?
  • 类型转换一般用于不同数据类型之间交互/赋值的情况。因此,要回答您的问题,您需要提供“g_Uart0RxBuf”类型
  • 该代码中没有初始化,只有一个赋值。
  • 你为什么认为,你需要一个演员表?您是否收到了对我们隐藏的编译器消息?

标签: c pointers casting


【解决方案1】:

不需要演员表。问题归结为以下之一:

  1. 你正在调用R_UART0_getBuffer之前编译器已经看到了函数的声明,而你现在松散的 C 编译器允许隐式函数定义(自 C99 以来已被禁止,但有些编译器默认打开它!)

  2. 编译错误实际上是指语句pointer_to_buffer = &g_Uart0RxBuf[0];,具体取决于该数组中的类型。

【讨论】:

  • 这就是问题所在。谢谢大佬。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
  • 2011-05-10
相关资源
最近更新 更多