c qsort字符串数组

c qsort字符串数组,c,string,qsort,C,String,Qsort,内部比较词: qsort(words, size1, size2, compareWords); 这项工作: int compareWords(const void *ac, const void *bc) 它们不会(a获取一些垃圾值): 理由是什么 另外,在一些示例中,我看到size2是sizeof(char*)。这不应该是sizeof(*words) 声明如下: char*words[]={“abc”、“pqr”、“abcd”、“pqsl”}当qsort对T数组进行排序时

内部比较词:

    qsort(words, size1, size2, compareWords);
这项工作:

    int compareWords(const void *ac, const void *bc)
它们不会(
a
获取一些垃圾值):

理由是什么

另外,在一些示例中,我看到
size2
sizeof(char*)
。这不应该是
sizeof(*words)

声明如下:
char*words[]={“abc”、“pqr”、“abcd”、“pqsl”}

qsort
对T数组进行排序时,比较函数必须将其
const void*
指针转换为
const T*
,因为T不能按值取值


如果
words
char*
char-const*
的数组,则必须将参数分别转换为
char*const*
char-const*const*
,这样说是很自然的。

qsort
,比较函数必须将其
const void*
指针转换为
const T*
,因为T不能按值取值


如果
words
char*
char const*
的数组,则必须将参数分别转换为
char*const*
char const*const*
,这样说很自然。

必须显示
words
的声明,因为您正在询问如何访问它。您是对的,
size2
是一个元素的大小。所以,
size2=sizeof(*words)
或者更好的
size2=sizeof(char)
@Michael is sizeof(*words)=sizeof(char)??在我的示例单词数组中,sizeof(*单词)为4,而sizeof(char)=1。我不认为他们是一样的。@Sushil,是的,我的错
*words
是一个
char*
所以是的
sizeof(char*)
sizeof(*words)
相同,你必须显示
words
的声明,因为你在询问如何访问它。没错,
size2
是一个元素的大小。所以,
size2=sizeof(*words)
或者更好的
size2=sizeof(char)
@Michael is sizeof(*words)=sizeof(char)??在我的示例单词数组中,sizeof(*单词)为4,而sizeof(char)=1。我不认为他们是一样的。@Sushil,是的,我的错
*单词
是一个
字符*
所以是的
sizeof(char*)
sizeof(*单词)
是一样的,嘿,thx,但准确地说,我想知道
*(const char**)ac的用法对我来说似乎很不直观。。。使用(const char*)进行类型转换有什么问题?您有一个
char*
数组,比较函数总是接收指向数组中元素的指针。因此,指向
char*
的指针。这些指针也恰好是常量,因此
*(const char**)ac
不是常量正确的,尽管没有实际后果,因为您不尝试写入此指针。嘿,thx,但准确地说,我想知道
*(const char**)ac
-对我来说似乎很不直观。。。使用(const char*)进行类型转换有什么问题?您有一个
char*
数组,比较函数总是接收指向数组中元素的指针。因此,指向
char*
的指针。这些指针也恰好是常量,因此
*(const char**)ac
不是常量正确的,尽管没有实际后果,因为您不尝试写入此指针。
    char const *a = *(const char **)ac;
    char const *a = ac;
    char const *a = (const char *) ac;