使用算术记数法横向排列一串字符
using arithmetic notation to transverse a string of chars
如何使用指针遍历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的成员。
谢谢你,
- C++为一串单词添加空格
- 为什么Visual Studio正在清除我的一串反斜杠
- 如何将内存中的位转换为一串和零?
- 如何返回一串字母数字字符中的最大值(例如-1A003B3)?
- 将单个字符串/字符输入串行监视器
- 创建一个程序,该程序将一串数字作为输入,并输出偶数和奇数的总和
- C++ 如何对一串数字求平均值
- 从网络数据包复制一串 wchar 时访问冲突
- C - 将文本文件读为一串单词,然后将字符串分为向量
- 我如何在一串随机生成的字母I C 中查找一个单词
- 从一串数字C++创建一个数字序列
- 将一串十六进制存储到字符中
- 在另一个字符串中查找一串数字
- 将一串数字分解为26以下数字的计数方法
- 把一串单词解析成一组单词
- 使用算术记数法横向排列一串字符
- 我有编译器的情况。当我运行代码来去除一串特殊字符时,它在一个编译器中运行,但在另一个编译器中不运行?
- 编写一个程序,读取一串包含标点符号的字符,并写入被读取的内容,但删除了标点符号
- 汇编:循环遍历一串字符并交换它们
- 一串只允许字母用于矩形名称的第一个字符