使用算术符号来横切一串字符

时间:2016-04-01 16:26:32

标签: c++ c arrays pointers

如何使用指针横切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 ++中工作。

1 个答案:

答案 0 :(得分:-1)

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

正如标题所暗示的那样,这将是如何使用指针横向一个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中,您将其称为空字符。但是我离题了,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的成员。

谢谢,