char**在ac程序中是什么意思,有人可以给出正确的解释吗?我正在查看与函数指针相关的排序指针,它有点令人困惑。
int compare(const void* a,const void* b)
{
char** sa=(char**)a;
char** sb=(char**)b;
return strcmp(*sa,*sb);
}
Run Code Online (Sandbox Code Playgroud)
在C, achar**意味着pointerapointer到 a character。
char c;
Run Code Online (Sandbox Code Playgroud)
意思c是一个字符。
char *cptr;
Run Code Online (Sandbox Code Playgroud)
方法
1. `*cptr` is a character
2. `cptr` is a pointer to a characer
Run Code Online (Sandbox Code Playgroud)
char **pptr;
Run Code Online (Sandbox Code Playgroud)
方法
1. `**pptr` is a character
2. `*pptr` is a pointer to a character
3. `pptr` is a pointer to a pointer to a character
Run Code Online (Sandbox Code Playgroud)
在你的情况下:
char **sa并且char **sb是pointer to pointer to characters。
并且*sa和*sb是pointer to characters。
strcmp将两个pointer to characters作为参数,因此pointer to characters在调用时传递这两个参数strcmp:
strcmp(*sa, *sb)
Run Code Online (Sandbox Code Playgroud)
只是,如果你对如何调用这个函数感到困惑,你需要做这样的事情来调用它。
/* Two strings */
char st1[] = {'a', 'b', 'c', '\0'};
char st2[] = {'c', 'b', 'a', '\0'};
/* Call compare */
int ret;
ret = compare((void *) &st1, (void *) &st2);
/* Do something based on value of `ret' */
Run Code Online (Sandbox Code Playgroud)
两个星号指定一个指向指针的指针。这就是为什么在对字符串进行排序的程序中需要它:
回想一下,C 将字符串表示为字符数组。每个 C 字符串通常表示为指向字符的指针,即char*,因此 C 字符串数组是char*.
C 标准排序算法实现使用比较函数,该函数采用指向数组元素的指针。由于每个元素都是一个指针,因此该函数采用一个指向指针的指针。
指向传递给的指针的指针compare被包装在 中void*,这允许在任何数据指针之间进行转换。比较函数所做的第一件事是强制转换void*回char**,以便它可以取消引用两者:
char** sa=(char**)a; // a is a char**, so we do the cast.
Run Code Online (Sandbox Code Playgroud)
现在左侧的字符串位于 处*sa,右侧的字符串位于 处*sb。这就是我们传递给的strcmp。
| 归档时间: |
|
| 查看次数: |
12016 次 |
| 最近记录: |