char**在ac程序中是什么意思,有人可以给出正确的解释吗

Gov*_*ali 2 c

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)

sps*_*sps 7

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 **sbpointer to pointer to characters

并且*sa*sbpointer 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)


das*_*ght 5

两个星号指定一个指向指针的指针。这就是为什么在对字符串进行排序的程序中需要它:

回想一下,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