免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: x5miao
打印 上一主题 下一主题

又发现一个C和C++的小不同 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-20 22:23 |显示全部楼层 |倒序浏览
本帖最后由 x5miao 于 2011-10-20 23:05 编辑

今天在看《C++primer》的时候又新发现一个C和C++的小小不同点。C中if,switch,while的条件只能是表达式不能是声明;而在C++中这些地方也允许带有初始化的定义。因此while(int c=getchar())在C++中合法但在C中不合法。

哎,觉得C和C++里面像class这些显而易见的区别倒还好,那些看起来一样但有区别的细微的地方才是最烦人的。放在一起很容易搞混。



更正:C99允许for的初始化部分是带有初试器的定义了

论坛徽章:
0
2 [报告]
发表于 2011-10-21 13:06 |显示全部楼层
本帖最后由 x5miao 于 2011-10-21 13:08 编辑

回复 99# zylthinking

void sort(stduent s[], int n, int c)
{
        qsort(&(s->mark[c]), n, sizeof(s[0]),compare);
}

    你这样排序出来的结果绝对是错的。

论坛徽章:
0
3 [报告]
发表于 2011-10-21 13:15 |显示全部楼层
本帖最后由 x5miao 于 2011-10-21 13:21 编辑

我能想出的办法是用一个静态变量了。

static int numcmp=0;
static int studentcmp(const void *student1,const void * student2)
{
     return  ((student *)student1)->mark[numcmp]- ((student *)student1)->mark[numcmp] ;
}
void sort(student s[],int n,int c)
{
      numcmp=c;
      qsort(s,n,sizeof(s[0]),studentcmp);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP