C++ 使用算术符号横切一串字符
如何使用指针横切字符数组?有没有办法使用指针横切数组 我有一个使用字符数组和for循环的程序,但我希望能够使用指针在字符数组中移动。但是,我不知道如何使用带有字符数组的指针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++) {
#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++时,我必须学会使用指针式的方法,这就是为什么我认为把它放在那里是可以的。你改变(仍然不清楚)问题的方式是粗鲁的,不尊重我给出简洁答案的努力,实际上发生了什么。@πάνταῥεῖ 这不是一场倒退战争。这是一个错误,我纠正了它,正如你们在下面我对自己问题的回答中所看到的。我纠正了这一疏忽。正如你在我问题的底部所看到的,我说我给出了一个关于使用指针检查字符串的答案。@πάνταῥεῖ 放下自我。