gpt4 book ai didi

c - 当我们在 C 中将两个指针等式化时会发生什么?

转载 作者:太空宇宙 更新时间:2023-11-04 04:30:28 25 4
gpt4 key购买 nike

这是一个 C 代码,用于从每个索引开始对大字符串的子字符串进行排序,但我无法理解我们如何在代码中对数组 a 进行排序。

据我了解:

  • 我们将 a[i] 引用到 &c[i] 因此它创建了 n 个数组但没有&a[i][1] == &a[i+1][0]?
  • 由于 a[i] = &c[i]&a[i][0] == &c[i] 是否为真?

  • 如果不是,这看起来是创建 n(原始长度string) 数组,而不实际复制它。是真的吗?

我的代码

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define M 1
#define MAXN 5000000
char c[MAXN], *a[MAXN];
int pstrcmp(char **p, char **q){
return strcmp(*p, *q);
}
int main(){
int i, ch, n = 0, maxi, maxlen = -1;
while ((ch = getchar()) != EOF) {
a[n] = &c[n];
c[n++] = ch;
}
c[n] = 0;
qsort(a, n, sizeof(char *), pstrcmp);
printf("%s",a[1]);
return 0;
}

最佳答案

我猜 pstrcmpstrcmp 的包装器,它将两个指针与 char 指针进行比较。像这样的东西:

int pstrcmp(const void *a, const void *b) {
return strcmp(*(char**)a, *(char**)b);
}

回答你的问题,

  • 是的,&a[i][1] == &a[i+1][0]。它们都指向 c 的第 i + 1 字符。
  • 是的,&a[i][0] == &c[i]
  • 您确实创建了指向 n 字符串的指针,但有一个问题:如果您更改了任何字符串(例如,最后一个字符),您将更改更多字符串。所以这些字符串不是独立的。

从概念上讲,a[i] 是指向 c 的后缀的指针,从位置 i 开始。然后程序根据它们指向的字符串的值对 a 进行排序。所以,对于 c = "abacaba",你会得到 { "a", "aba", "abacaba", "acaba", "ba", "bacaba", "caba"

请注意,有更快的方法来构建suffix arrays .

关于c - 当我们在 C 中将两个指针等式化时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36881583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com