int main() {
char **k;
char *s ="abc";
char *b ="def";
k = &s;
k++;
k = &b;
cout<<*(k - 1)<<endl; // nothing but newline. Shouldn't I get "abc"?
//EDIT: corrected a typo should be *(k - 1)
}
除了 cout
的 newline
之外,我一无所获。当我查看 char* 的行为时,我得到的印象是,因为我有第一个字符的地址,所以我可以像数组一样使用 char*,这是事实。但是,对于 char** 这种行为似乎完全不同,当我尝试 k++ 时,它的行为似乎不像数组。这是为什么?
同样,当我尝试 (K + 1) = &b;我收到一个错误,为什么我不能这样做?
最佳答案
k
是指向 char 指针的指针,因此当您推进它时,它不会像您期望的那样沿着字符串向下移动。相反,它现在指向与它指向的那个相邻的 char *
。在你的情况下没有,所以你在打印 *(k - 1)
的值时取消引用随机内存位置。
(K + 1) = &b;
上面是一个错误,因为你必须在赋值的左侧有一个左值,它不能是一个临时表达式(右值)。
编辑: 这是一个示例,希望比阅读您所犯的错误更容易理解。
int main()
{
char **k;
char *s[2] = {"abc", "qwerty"};
k = &s[0];
std::cout << *(k + 1) << std::endl; // prints "qwerty"
k++;
std::cout << *(k - 1) << std::endl; // prints "abc"
std::cin.get();
return 0;
}
关于c++ - 另一个小内存 C++ 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6566539/