| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 797 人关注过本帖
标题:大佬帮忙分析下这个程序,类型转换不是很理解,谢谢各位了!
只看楼主 加入收藏
nuoyoyo
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2018-5-16
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:1 
大佬帮忙分析下这个程序,类型转换不是很理解,谢谢各位了!
#include<math.h>
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
void * func(void *str1,void *str2,void * (*p)(void * str3, void *str4))
{
    return (*p)(str1,str2);
}
void * mystrcat(void * str1,void *str2)
{
    strcat(str1,str2);
    return (void *)str1;
}
void * mystrlen(void * str1,void *str2)
{
    int i=strlen(str1);
    return (void *)i;
}
void * mystrcpy(void * str1,void *str2)
{
    strcpy(str1,str2);
    return (void *)str1;
}

void * mystradd(void * str1,void *str2)
{
    int i=(int)str1+(int)str2;
    return (void *)i;
}
int main()
{
    char str1[20]="hello";
    char *str2="world";
    printf("%d\n",(int)func((void *)str1,(void *)str2,mystrlen));
    printf("%s\n",(char *)func((void *)str1,(void *)str2,mystrcat));
    printf("%s\n",(char *)func((void *)str1,(void *)str2,mystrcpy));
    printf("%d\n",(int)func((void *)100,(void *)200,mystradd));
}


[此贴子已经被作者于2018-5-22 10:43编辑过]

搜索更多相关主题的帖子: void return int char printf 
2018-05-22 09:47
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:20 
什么不理解~
函数指针可以理解吧?~

强制转换记得一般情况下除了函数指针和void*不等价外其它指针类型都可以通过隐式转换成void*型(试过某些严谨的编译器会说函数指针类指针和void*指针不等价从而无法通过编译,但实际上二者的确是不等价的)
也就是说void*在指针里面几乎是万能的,所以不知道为啥还要多加那么多void*进行强制转换~

当然void*能不能隐式转换成其它形式的指针就要看编译器的解析了,一些先进的编译器可以自动进行隐式转换,但为了可移植性以及保持一种约定的书写习惯方式,通过默认void*强制转换成其它指针类型是要加类型说明的~

[此贴子已经被作者于2018-5-22 19:23编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-05-22 19:21
快速回复:大佬帮忙分析下这个程序,类型转换不是很理解,谢谢各位了!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026011 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved