void 类型的值不能用于初始化 int 类型的实体

joseph1314520 2022-12-29 09:29:32

void send_txsq(unsigned char cmd, unsigned char* src_user_addr, unsigned char* dst_user_addr,
    unsigned char transfer_format, unsigned char* send_txsq_payload, unsigned int send_txsq_payload_len)

{

}

int main()

{

int a=send_txsq();

}

提示void 类型的值不能用于初始化 int 类型的实体要怎么解决呀求解

...全文
1504 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
maguangzhi 2024-11-15
  • 打赏
  • 举报
回复

void类型的真实含义是值的类型或者字节数不确定,参见《C++程序设计实践教程(新国标微课版)》,所以,不能将该函数调用的结果赋值给确定为sizeof(int)=4个字节的整型变量a。另一个佐证void类型字节数不确定的定义是void p=&p; 对于p来说是不能进行p++等地址移动计算的,因为p指向的void类型的字节数不定,你不知道p++要移动跳过多少字节。
由于void
p表示p可以指向任何类型(任意字节数)的变量或内存,故对于“int x; double y;”来说, p=&x或p=&y都是可以的。但对p进行赋值可不行,因为p的结果类型为void, 即其占用内存的字节数不确定,这样赋值到底要改写几个字节就不知道。所以,你得先强制转换p的类型,使其指向的内存单元字节数确定,例如使用(int)进行强转然后赋值*(int *)p=3;这样的赋值才行。
许多教材说void函数没有返回值,这个是一个不准确的说法,试问函数的返回值存在什么地方?或者说到哪里去取出函数值。对于X8086系列的计算机的来说,函数的返回值存放在通用寄存器AX、EAX或RAX中,视编译器支持的int是16位的、32位的还是64位二进制。既然是用通用寄存器AX、EAX、RAX存返回值,也就是说,不管你定义什么函数,返回时它们都是有值的。比如对于如下程序main没有返回值:
int x=0;
int main(){
x=x+1; //但main的返回值实际为1,因为32位模式EAX存放X+1的结果为1
}
假定上述程序编译为m.exe, 你再写一个批处理程序a.bat如下:
m.exe
if errorlevel 1 echo "return 1"
if errorlevel 0 echo "return 0"
执行a.bat批处理程序,将得到m.exe的返回结果,a.bat将输出return 1。

待续_1006 2023-01-17
  • 打赏
  • 举报
回复

函数你都定义为void了,怎么可能还有返回值。。。。。

CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-编程语言 发布问题, 以便更快地解决您的疑问

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧