如果我想迭代一个字符串,在这种情况下'test',我可以像这样使用指针算法来获取下一个字符:
char *c = "test";
*c++;
putchar(*c);
Run Code Online (Sandbox Code Playgroud)
这将打印第二个字母'e'.
但是,如果我想去第三个角色,为什么我不能说:
char *c = "test";
c = *c + 2; //*c = *c + 2; also doesn't work
putchar(*c); //Exception thrown: write access violation.
Run Code Online (Sandbox Code Playgroud)
?
据我所知,使用指针算法获取第三个字符的唯一方法是像这样强制转换它:
char *c = "test";
c = (char *) c + 2;
putchar(*c);
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释为什么会这样吗?
c 这是一个保存内存位置地址的指针.
*c被称为取消引用指针,它将给出存储在指向的内存位置的值c.
所以
c = *c + 2
Run Code Online (Sandbox Code Playgroud)
将会
c = (value stored at c) + 2;
Run Code Online (Sandbox Code Playgroud)
这不会给内存位置
c = c + 2;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |