我在访问字符时遇到问题,当它们转换为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;
}
答案 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
。