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) 编辑 收藏 举报