BnE*_*BnE 4 c++ string pointers c-strings
我试图理解指针在这里是如何工作的.该findTheChar
功能搜索str
该角色chr
.如果chr
找到,则返回指向str
首次找到字符的指针,否则nullptr
(未找到).我的问题是为什么函数打印"llo"
而不是"l"
?虽然我写的代码main
返回"e"
而不是"ello"
?
#include <iostream>
using namespace std;
const char* findTheChar(const char* str, char chr)
{
while (*str != 0)
{
if (*str == chr)
return str;
str++;
}
return nullptr;
}
int main()
{
char x[6] = "hello";
char* ptr = x;
while (*ptr != 0)
{
if (*ptr == x[1])
cout << *ptr << endl; //returns e
ptr++;
}
cout << findTheChar("hello", 'l') << endl; // returns llo
}
Run Code Online (Sandbox Code Playgroud)
C字符串是由字符终止的字符缓冲区'\0'
.传递它们只涉及将指针传递给第一个元素.
所有的库程序都知道它们可以从它们给出的地址开始读取字符,直到它们到达为止'\0'
.由于这是怎样operator<<
的std::cout
设计,它假定你传递一个C-string的起始地址.这是合同.
如果要打印单个字符,则需要取消引用该指针.