通过C ++中的指针访问字符数组

时间:2017-06-26 15:16:48

标签: c++

我在访问字符时遇到问题,当它们转换为ASCII数字时却没有明确地这样做。请考虑以下代码:

include<iostream>

using namespace std;

int main()
{

  char* p;

  char s[100]="hello world";

  p=s;

  cout<<p[2]<<endl;//This gives the actual character from the string "hello 
  //world": "l"

  p=p+p[4]-p[2];//But this does something different, it basically uses

//ASCII values of the characters at p[4] and p[2] and uses them to do 
//pointer arithmetic

   cout<<p;// gives "lo world"

   return 0;

 }

2 个答案:

答案 0 :(得分:1)

那是因为p持有基地址。 'o'(p [4])的ascii值为111,'l'(p [2])的ascii值为108.

当你做p = p + p [4] - p [2]

您正在更新基地址。那就是假设p的基址是x。

在更新p之后

将是x + 111-108 =&gt; x + 3。

因此你得到的字符串是“lo world”,前三个字符“hel”被跳过。

答案 1 :(得分:0)

  

尽管表达式有p=p+p[4]-p[2]p[4],但是在使用p[2]时我才会收到编译错误,这应该返回字符值吗?

在C ++中char被认为是整数数据类型,因此它被视为具有小范围值的整数类型。

C ++定义了在右侧采用整数的指针加法/减法运算。由于char是一个整数类型,因此对于指针算术操作,其值将提升为int