将字符串理解为C 中的指针
Understanding strings as pointers in C++
我有麻烦将字符串视为指针。显然,字符串被理解为指向字符串第一个地址的指针。因此,使用"&" - 运算符我应该收到字符串的第一个字符的地址。这是一个小例子:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(){
char text[101];
int length;
cout << "Enter a word: ";
cin >> text;
length = strlen(text);
for (int i = 0; i <= length; i++) {
cout << " " << &text[i];
}
return 0;
}
输入诸如" Hello"之类的单词时,输出为:" Hello Ello llo lo o"。相反,我希望收到每个字符的地址" Hello"。当我使用铸件long(&text[i])
时,它可以很好地工作。但是我不明白为什么。没有演员,显然是"&amp;" - 运营商给出了要打印的字符串的起始地址。使用铸件,它可以分别提供每个字符的地址。也许是SB。可以向我解释这一点 - 我真的很感激!
&text[i]
等于 text + i
,并且使用 pointer arithmetic 将指针沿char[]
数组沿CC_4数组转移。效果是在第(i)个字符上启动cout
,<<
与const char*
的过载。从起点到nul末端的所有字符。
text[i]
是char
类型,<<
与char
的过载被调用。输出一个字符。
在C 中,如果您想要一个字符串,请改用std::string
。如果text
是std::string
类型,您仍然可以编写cin >> text;
!然后,您的代码也不容易限制您的char
缓冲区。
如果您有一个字符数组存储字符串,例如
char text[] = "Hello";
然后将数组像
初始化char text[] = { 'H', 'e', 'l', 'l', 'o', ' ' };
在此语句中
std::cout << text;
使用的operator <<
用于类型const char *
,并且数组text
被隐式转换为指针转换为其第一个元素。
你可以写
std::cout << &text[0];
因为在两个语句中表达式text
和&text[0]
具有类型char *
。
类型const char *
的操作员从指针处的地址开始输出字符,直到遇到零字符为止。
所以如果代替语句
std::cout << &text[0];
你会写
std::cout << &text[1];
那么,唯一更改的是字符串的起始地址,仅此而已。实际上,您正在输出如
表示的字符串{ 'e', 'l', 'l', 'o', ' ' }
如果写
std::cout << &text[2];
是,如果表达式的右侧指针移动一个位置,则意味着您将处理字符串
{ 'l', 'l', 'o', ' ' }
等等。
那是
的operator <<
template<class traits>
basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&,
const char*);
仅输出由第二个参数指向字符串的实体。
如果要输出指针本身的值,而不是指针指向指向的字符串,则应使用另一种超载的operator <<
,如
basic_ostream<charT, traits>& operator<<(const void* p);
tp调用它,你应该写
std::cout << ( void * )text;
或
std::cout << ( void * )&text[i];
其中 i
是一些索引。
而不是C铸件,您可以使用C 铸件,例如
std::cout << static_cast<void *>( &text[i] );
要打印数组元素的地址,您可以做:
cout << " " << (void*)&text[i];
这个:
cout << " " << &text[i];
等效于此:
cout << " " << text + i;
这意味着您要求打印字符串,从索引i
。
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 使用指针初始化 char 数组或字符串 C++
- 指针保留字符串
- Visual c ++,使用字符串引用/指针调用 dll 函数
- strcpy 在类中无法使用字符串指针
- C++为 void 指针分配一个字符串
- OpenGL 统一名称指针作为字符串
- 如何将字符串指针数组转换为字符串类型的智能指针向量?
- 转换指针引用的字符串
- 未分配释放C++(C 字符串)指针
- 为什么 C 样式字符串的工作空指针检查不?
- 为什么多维数组中的空字符串文本衰减为空指针?
- 使用终止程序的指针在数组中输入字符串
- 将指针作为缓冲区传递到第一个字符串元素
- 指针 - 字符串C
- C++:更改指针字符串的值
- 使用带字符指针字符串的基于范围的For循环
- 转换/解析指针字符串和双精度
- 有问题分配字符串指针字符串值