【发布时间】:2014-10-23 08:52:58
【问题描述】:
这段代码sn-p主要来自qsort的man page。
int cmp(const void *p1, const void *p2)
{
char s1 = *(*(char * const *)p1);
char s2 = *(*(char * const *)p2);
return s1 - s2;
}
int main(int argc, char *argv[])
{
int j;
printf("Before Qsort: \n");
for(j = 1; j <argc ; j++)
printf("%s ", argv[j]);
printf("\n");
qsort(&argv[1], argc - 1, sizeof(char *), cmp);
printf("After Qsort: \n");
for(j = 1; j <argc ; j++)
printf("%s ", argv[j]);
printf("\n");
}
我可以理解我将指针的地址传递给 qsort 中的 &argv[1] 字符数组 但是,我很困惑为什么我必须进行以下演员才能获得价值?
*(*(char * const *)p1)
我还检查了stackoverflow中的其他问题,当我们传递一维数组时很容易。 所以,我可以使用
type var = *(const type *)p1 获取值
看看这个例子,类型转换看起来很奇怪。
请你帮我理解每一个铸件的意义,以达到最终的价值?
谢谢。
【问题讨论】:
-
sn-p 只比较字符串的第一个字符,这是你想要的吗?片段确实包含
*(type *)p1,其中type是const char*。 -
我要解析的是来自命令行参数的数组。