Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用算术符号横切一串字符_C++_C_Arrays_Pointers - Fatal编程技术网

C++ 使用算术符号横切一串字符

C++ 使用算术符号横切一串字符,c++,c,arrays,pointers,C++,C,Arrays,Pointers,如何使用指针横切字符数组?有没有办法使用指针横切数组 我有一个使用字符数组和for循环的程序,但我希望能够使用指针在字符数组中移动。但是,我不知道如何使用带有字符数组的指针 #include <stdio.h> #include <string.h> int main() { char arr[] = "abcde"; int length = strlen(arr); for(int i = 0; i < length;i++) {

如何使用指针横切字符数组?有没有办法使用指针横切数组

我有一个使用字符数组和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;
}
#包括
#包括
int main(){
字符arr[]=“abcde”;
整数长度=strlen(arr);
for(int i=0;i

我需要改变横切数组的方式,但不确定如何使用指针。它还需要在C和C++中工作。p> 好吧,在搜索了答案后,我决定用自己的答案提问。请随意批评我,但我觉得这可以帮助很多人解决有关指针的问题

正如标题所示,本文将讨论如何使用指针从这里开始横切字符数组、字符串

我提出这个问题是因为我忘记了如何使用指针横切字符串,我花了一分钟重新发现了如何做

<>这个代码应该在C和C++中都能工作。我已经用ideone.com编译了它,我知道它是有效的

#include <stdio.h>


int main() {

  char *ptr;
  char arr[] = "abcde";

  for(ptr = arr; *ptr;ptr++)
  {
       printf("%c ", *ptr);
  }
    return 0;
}
#包括
int main(){
char*ptr;
字符arr[]=“abcde”;
用于(ptr=arr;*ptr;ptr++)
{
printf(“%c”,*ptr);
}
返回0;
}

如上所述,我们首先创建一个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的命令。

其结果是按“a b c d e”顺序打印出阵列

打印机算法如此有用的原因有两个。 1.帮助学生理解指针,当你第一次开始时,在进入高级C++项目之前。 2.它使使用动态内存成为可能,没有指针,也没有横穿指针的能力,如果您的程序超出了最初为程序分配的内存量,那么您将没有追索权

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

请让我知道您的想法,并随时给我评论,我很乐意修改此问题/答案,以便我们能够帮助so的成员


谢谢你,

你为什么期望
*ptr!='\0'
这是真的吗?@ZdeslavVojkovic很好,我应该添加ptr吗!=空到循环?把它改成一段时间。@Caperneoignis没有。C中的字符串由
'\0'
终止,而数组不是,所以不要将其传递给
strlen
。现在您需要显式添加
'\0'
。你有一个字符数组,但不是字符串。但是,我一直被告知,空终止符被添加到C和C++中的字符串的结尾,所以这就是我这样做的原因。有没有理由不这样做?我只是想知道将来的用途。通常我会同时执行doe不等于null和检查null终止。为什么
ptr
会是
null
?您没有字符串,而是一个字符数组。只需将
arr
声明为字符串文本:
auto-arr=“abcde”请自己做一个帮助,失去C++标签。但是它可以同时工作,所以我用这种方式标记。不过我开始明白你的意思了。但是,当我开始用C++时,我必须学会使用指针式的方法,这就是为什么我认为把它放在那里是可以的。你改变(仍然不清楚)问题的方式是粗鲁的,不尊重我给出简洁答案的努力,实际上发生了什么。@πάνταῥεῖ 这不是一场倒退战争。这是一个错误,我纠正了它,正如你们在下面我对自己问题的回答中所看到的。我纠正了这一疏忽。正如你在我问题的底部所看到的,我说我给出了一个关于使用指针检查字符串的答案。@πάνταῥεῖ 放下自我。