回 帖 发 新 帖 刷新版面

主题:[讨论]代码方面的2个问题,大家帮我看看,万分感谢,急着解决...

-------------------------------------------------------------------------
void sort(char *p[])
{
    int i,j;
    char *temp;
    for(i=1;i<10;i++)
    {
        for(j=0;j<10-i;j++)
        if(strcmp(*(p+j),*(p+j+1))>0)
        {
            temp=*(p+j);
            *(p+j)=*(p+j+1);
            *(p+j+1)=temp;
        }
    }
}



其中
    temp=*(p+j);
    *(p+j)=*(p+j+1);
    *(p+j+1)=temp;
为什么不可以用strcpy(temp,*(p+j))这中形式啊...

--------------------------------------------------------------------------

#include<iostream.h>
#include<stdlib.h>
#include<string.h>
int compare(const void* a,const void *b)
{
 retrun strcmp(*(char**)a,*(char**)b);
}

char* list[5]={"cat","car","cab","cap","can"};
void main()
{
qsort((void*)list,5,sizeof(list[0]),compare);
     for(int i=0;i<5;i++)
     cout<<list[i]<<endl;
}
原型中qsort(void*,size_t nelem,size_t width,
            int(*fcmp)(const void*,const void*));第三个参数不是指元素类型的长度么,应该用sizeof(char)但为何用sizeof(list[0]),那不成了指元素的字节数了么?
还有 retrun strcmp(*(char**)a,*(char**)b);中那么多星号怎么解释啊...

回复列表 (共5个回复)

沙发

其中
    temp=*(p+j);
    *(p+j)=*(p+j+1);
    *(p+j+1)=temp;
为什么不可以用strcpy(temp,*(p+j))这中形式啊...

注意,这样的形式是对的
但是,你没有对TEMP进行初始化,也就是说temp都没有分配地址给他,你怎么可能对他的内存进行操作呢?

板凳

原型中qsort(void*,size_t nelem,size_t width,
            int(*fcmp)(const void*,const void*));第三个参数不是指元素类型的长度么,应该用sizeof(char)但为何用sizeof(list[0]),那不成了指元素的字节数了么?
还有 retrun strcmp(*(char**)a,*(char**)b);中那么多星号怎么解释啊...

MSDN:中,关于第三个变量的解释为:
width
Element size in bytes
也就是说
他是Element的大小,不是Element Type的大小啊

(*(char**)a)
(char**)a---强制转换a为char**类型

3 楼

明白点了,非常感谢...

4 楼

自己多看些c++基础的书吧

5 楼

可以用sizeof(char*),和sizeof(list[0])是一样的

我来回复

您尚未登录,请登录后再回复。点此登录或注册