当我们在C中使用两个指针时会发生什么?

时间:2016-04-27 06:07:22

标签: c string pointers

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

据我所知:

  • 我们将'add_font_awesome'()提交给a[i],因此它创建了n个数组,但不是 &c[i]
  • &a[i][1] == &a[i+1][0]以来a[i] = &c[i]是否正确?

  • 如果没有,这看起来像是一种更快的方式来创建n(原始的长度 字符串)数组,而不实际复制它。这是真的吗?

我的代码

&a[i][0] == &c[i]

2 个答案:

答案 0 :(得分:0)

我猜测pstrcmpstrcmp的包装器,它比较两个指向char指针的指针。类似的东西:

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

回答你的问题,

  • 是的,&a[i][1] == &a[i+1][0]。它们都指向i + 1的{​​{1}} - st字符。
  • 是的,c
  • 你确实在创建指向&a[i][0] == &c[i]字符串的指针,但有一个问题:如果你改变了任何字符串(比如最后一个字符),你就会改变更多的字符串。所以这些字符串不是独立的。

从概念上讲,n是从位置a[i]开始的c后缀的指针。然后,程序根据它们指向的字符串的值对i进行排序。因此,对于a,您将获得c = "abacaba"

请注意,有更快的方法可以构建suffix arrays

答案 1 :(得分:0)

在此代码中,我不会看到子字符串,因为您不构建任何子字符串。
从技术上讲,achar类型的指针数组,可以使其成为字符串数组,但是您将ca的关联方式实际上a }是c的索引 在循环内部,您通过char填充索引char。稍后当您对a进行排序时,您会对索引进行排序。

索引的问题在于,您无法将其打印为字符串,因为它不是char * printf格式修饰符所期望的%s,而是{ {1}}。仅这一点就应该警告你一些怪异的东西。我看到你把这个问题作为硬编码char **作为参数来回避这个问题,但是使用什么索引的唯一问题是,你说错了。

我对您的代码进行了轻微编辑,以及如何打印出已排序的数组。如果你认为做你想做的事情,那么你想要什么和你的代码之间有什么误解(除了最后a[1])。

printf