*((int *)pval)/=2; //我想问一下,这个语法怎么理解,太复杂了 具体代码如下。

[复制链接]
查看11 | 回复1 | 2011-7-27 18:25:48 | 显示全部楼层 |阅读模式
#include "stdio.h"
void half(void *pval,char type);
main()
{

        int i=20;
        longl=100000;
        float ff=12.456;
        double d=123.044444;
        printf("%d\n",i);
        printf("%ld\n",l);
        printf("%f\n",ff);
        printf("%lf\n",d);
        half(&i,'i');
        half(&l,'l');
        half(&ff,'ff');
        half(&d,'d');
        printf("\n%d",i);
        printf("\n%ld",l);
        printf("\n%f",ff);
        printf("\n%lf",d);
        return 0;
        }
void half(void *pval,char type)
{
        switch(type)
        {
        case 'i':
                {
        *((int *)pval)/=2; //我想问一下,这个语法怎么理解,太复杂了
                        break;
                        }
                                               
        case 'l':
                {
                        *((long *)pval)/=2;
                        break;
                        }
case 'ff':
                {
                        *((float *)pval)/=2;
                        break;
                        }
                       
        case 'd':
                {
                        *((double *)pval)/=2;
                        break;
                        }
                       
                }
        }

回复

使用道具 举报

千问 | 2011-7-27 18:25:48 | 显示全部楼层
*((int *)pval)/=2; 一步步讲解:1,(int*)pval是把pval指针强制类型转化成int*,这时pval可看作是个指向int的指针。为了方便说明我们可以int *p = (int*)pval;以后就可以用p代替(int*)pval了。2,*(p)/=2;也就是 *p /= 2; 这里括号可以去掉了。/=类似+=、*=, *p/=2;就是 *p = *p/2;...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行