首页 > 试题广场 >

选择填空

[单选题]
选择填空:
void test(void *data) {
    unsigned int value = (此处应填入)
    printf("%u", value);
}
using namespace std;
int main() {
    unsigned int value = 10;
    test(&value);
    return 0;
}

  • *data
  • (unsigned int)(*data)
  • (unsigned*)data
  • *((unsigned int *)data)
推荐
答案D
解释: 
void test(void *data)
 注意,参数类型是void,  所以先要进行指针转换:(unsigned int *)然后再取值。
编辑于 2015-01-27 15:20:18 回复(2)
实际上只要是*data,我们就知道了它是指针,如果是32位机器,该指针就指着内存中的某个地址,用32位表示,记住这个32位只是初始地址,任何指针都是的。而前面的void 或者int 类型是定义一次读几个字节,如果是int则读4个字节,也就是从*data存的地址开始从内存往后读4个字节就行,而void是空,没有指定要读多少个字节,所以要用指针类型(unsigned int *)强制转化为知道要读几个字节的int指针,然后再用*从开始地址,读取unsigned int个字节出来!
发表于 2015-12-14 10:46:08 回复(2)
参数是 void*, 编译器不知道它的具体数值类型,不能直接取值,B错
先转换为具体指针类型,然后再取值
发表于 2015-06-11 12:13:32 回复(0)
先要进行指针转换,再取指针所指向的值。一定要分清先后关系。
发表于 2016-05-18 17:01:21 回复(0)
void指针先明确类型,然后再取值
发表于 2016-03-22 19:08:17 回复(0)
由 unsigned int value = 10; 知道data指针类型,再对相应的指针类型解引用获得整型对象
发表于 2018-03-02 19:39:34 回复(0)
voidtest(void*data) {
其中传的参数是void,那么编译器不知道具体类型,不能直接将其赋值给value,否则两边不对等。
只能先将data转换为左侧的类型,然后在取值。

发表于 2017-03-01 15:57:49 回复(0)
一个指针类型 int * p ,p是变量是指针类型 * 表示它是个指针,int 是是指针的类型,为什么要定义指针的类型呢,因为对内存的读取需要知道读取多少字节空间的数据,假如将p强转为char类型编译器只会读取一个字节空间的大小
发表于 2019-09-24 15:13:19 回复(0)
&value——*data,那么value——**data.
所以unsigned int &value——unsigned int *data,而unsigned int value——*(unsigned int &value——*(unsigned int *data)。
这样理解有问题吗?
发表于 2019-02-15 22:15:29 回复(0)
先对指针类型转型,再解引用
发表于 2018-05-29 09:09:28 回复(0)
先要进行指针转换,不能直接读数据,我入坑了。答案选D
发表于 2017-07-22 11:59:50 回复(0)
先把它转成unsigned int* (unsigned  int 类型指针 ),在对它整体取值就是unsigned int咯!
发表于 2017-03-23 21:00:38 回复(0)
答案:D
*((unsigned int *)data)
因为直接写数据得到的是int型,需要强制类型转换
发表于 2015-01-26 21:19:47 回复(0)
实参类型:unsigned int *
形参类型:void *data
void *类型是万能指针,可指向任何数据类型,使用前强转成要使用的数据类型。
使用的时候先转为实参类型,再解*。
*((unsigned int *)data)
发表于 2023-10-25 21:24:09 回复(0)

函数test接受一个void*类型的指针作为参数。void*是一种通用的指针类型,可以指向任何类型的数据。

如果我们想要使用指针所指向的值,我们需要将其转换为正确的类型。在这种情况下,将指针所指向的值转换为unsigned int类型。void*类型的指针转换为unsigned int*类型的指针,在取*

发表于 2023-09-10 19:10:38 回复(0)
由于是void,先强转为对应类型的指针指明占有几个地址空间,在加*号取里面的值
发表于 2023-04-02 17:50:12 回复(0)
void*不可以解引用
发表于 2023-03-31 16:23:50 回复(0)
答案选D
如果是针对int*c取值,大家都知道在前面加个*号,*c就可以取值了,原因是int类型固定是4个字节,本题中需要unsigned int类型,题目给的是
void *data,我们可以想到把data转换成(unsigned int*)data,然后再把转换结果用括号括起来,再在前面加个*就可以取值了。
*((unsigned int *)data)

发表于 2021-11-17 16:31:51 回复(0)
注意,参数类型是void,  所以先要进行指针转换:(unsigned int *)然后再取值。
发表于 2021-09-16 09:34:39 回复(0)
void*是空类型指针,需要强制转换成unsigned int*,又因为左侧是一个unsigned int类型的值,所以右侧需要取值
发表于 2021-02-03 11:43:31 回复(0)
void *类型的变量不能直接进行解引用的操作,也不能直接进行自增的运算
都必须要先进行强制类型转换
发表于 2020-02-01 13:15:54 回复(0)