导航

int和void *

所以现在就有一个问题,编程时我们常用的是32位int,当编译使用的32位机器,void *可以强制转换为int用。

当void *作为参数时,机器变为64位,此时void *转换为long,long做参数不方便,但我们还是可以通过取地址解决。

当void *作为返回值时,机器变为64位,返回值一定不能传函数内的地址,当void *是随着机器字长变化的,这个时候就根据机器字长定义一个类型,但void *不是地址时,使用该类型。

 

 

----------------------------------------------

 

之前电脑32位,void *和int可以随便转换。

现在电脑64位,编译会报错,原因如下。

 

测试代码

#include <stdio.h>

int main()
{
        printf("void * :%lu\n", sizeof(void *));
        printf("int :%lu\n", sizeof(int));
     printf("long :%lu\n", sizeof(long));
return 0; }

输出:

void * :8
int :4

long :8

posted on 2021-04-21 14:41  toughcactus  阅读(406)  评论(0编辑  收藏  举报