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;