使用算术记数法横向排列一串字符

using arithmetic notation to transverse a string of chars

本文关键字:字符 一串 排列 横向      更新时间:2023-10-16

如何使用指针遍历char数组?有没有一种方法可以使用指针遍历数组?

我有一个使用char数组和for循环的程序,但我希望能够使用指针在字符数组中移动。然而,我不知道如何使用带有字符数组的指针。

#include <stdio.h>
#include <string.h>
int main() {
  char arr[] = "abcde";
  int length = strlen(arr);
  for(int i = 0; i < length;i++)
  {
       printf("%c ", arr[i]);
  }
  return 0;
}

我需要改变遍历数组的方式,但不确定如何只使用指针。它还需要在c和c++中工作。

好的,所以在搜索后没有看到答案,我决定用自己的答案提问。请随意批评我,但我觉得这可以帮助很多人提出关于指针的问题。

正如标题所示,这将讨论如何使用指针遍历char数组、字符串。

我之所以提出这个问题,是因为我忘记了如何使用指针横切字符串,我花了一分钟的时间才重新发现如何做到这一点

这段代码应该可以在c和c++中使用。我用ideone.com编译了它,我知道它是有效的。

#include <stdio.h>

int main() {
  char *ptr;
  char arr[] = "abcde";
  for(ptr = arr; *ptr;ptr++)
  {
       printf("%c ", *ptr);
  }
    return 0;
}

http://ideone.com/e.js/CC5IZ6

正如我们在上面看到的,我们首先创建一个char类型的指针,*ptr,然后在char arr[]中创建一个字符数组。然后我们在for循环的第一部分中让"ptr"指向"arr"。

for循环的第二部分是条件部分,我们正在使用"\0"查找字符串的末尾。通过在变量前面使用"*"来"取消引用"ptr",我们可以访问指针"指向"的内存中的信息,该信息将是char数组中的一个字符。在这种情况下,我们正在寻找由"\0"字符表示的字符串的末尾。我听说它叫很多东西;然而,在C中,您将其称为null字符。但我离题了,for循环的下一部分是递增部分,它在for循环的每次迭代中将ptr递增一个位置。

for循环允许我们通过增加为字符数组分配的内存点来移动指针。这允许我们使用指针算术来使用指针在数组中移动。

要使用printf打印数组中的项,我们需要使用"*"符号再次取消引用指针(不确定如何最好地描述它,所以如果有人知道更好的方法,请告诉我)。这将获取指针当前指向的内存中的项目,并允许其打印出来。

如果我们不使用"*"符号会发生什么?好吧,目前设置printf的方式是打印字符,我们会得到一个错误,或者什么都没有。如果您想查看指针所在的内存位置,而不是该内存位置中的内容,请将printf更改为"printf(%p',ptr);"%"p'表示打印指针地址。

如果你很好奇,请在这里查找其他可以发送到printf的命令。http://www.cplusplus.com/reference/cstdio/printf/

这样做的结果是数组按照"a b c d e"的顺序打印出来。

打印机算术之所以如此有用,有两个原因。1.在你刚开始学习高级c++项目之前,帮助学生理解指针。2.它使使用动态内存成为可能,没有指针和遍历指针的能力,如果你的程序超过了你最初为程序分配的内存量,你就没有追索权。

最后一部分是我对指针的理解,我相信c大师会有更好的定义,我很乐意修改其中的原因。

请让我知道你的想法,并随时给我一个批评,我很乐意修改这个问题/答案,这样我们就可以帮助so的成员。

谢谢你,