首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C 语言中的 (void *) str解决方法

2013-04-26 
C 语言中的 (void *) strHi,我在一段C代码里有如下定义,#include stdio.hint main(void){void *str h

C 语言中的 (void *) str
Hi,我在一段C代码里有如下定义,


#include <stdio.h>
int main(void)
{
    void *str = "hello world";
    printf("%s\n", (void *)str);
    return 1;
}

代码输出"hello world"
其中这个 (void *) str起到什么作用吗,毕竟正常情况下是这样的:printf("%s\n", str);
如果我改成 (int *) str也是可以正常运行的。
所以不知道这个(void *)有什么作用?在一些其他代码里也经常会看到类似(void **) 的情形。
在C语言里这个语法叫什么?

[解决办法]
“hello world”这个字符串常量的值是首字节的地址,所以它在给str指针赋值的时候会给它地址,至于是(void *)的话,那必须是强制类型转换了,因为有()的存在,即使说str以前不是指针,但是现在就成了void *类型的指针了。void *类型的指针,意思是说指向的存间类型为空,void **则是指向一个空类型指针的地址。至于空类型的理解,我看过的一些书的说法是:内存本无类型,认为定义而已,所以原始指向没有类型之分。
[解决办法]
可以消除编译器的警告,xxx变量未使用。

[解决办法]
强制类型转换

static int cmp(const void *a,const void *b)
{
    return *(int *)a-*(int *)b;
}

热点排行