65,210
社区成员
发帖
与我相关
我的任务
分享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 类型的实体要怎么解决呀求解
void类型的真实含义是值的类型或者字节数不确定,参见《C++程序设计实践教程(新国标微课版)》,所以,不能将该函数调用的结果赋值给确定为sizeof(int)=4个字节的整型变量a。另一个佐证void类型字节数不确定的定义是void p=&p; 对于p来说是不能进行p++等地址移动计算的,因为p指向的void类型的字节数不定,你不知道p++要移动跳过多少字节。
由于voidp表示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。
函数你都定义为void了,怎么可能还有返回值。。。。。