我的代码:
#include <iostream>
using namespace std;
int main() {
char *test = (char*)malloc(sizeof(char)*9);
test = "testArry";
cout << &test << " | " << test << endl;
test++;
cout << &test << " | " << test << endl;
return 1;
}
结果:
004FF804 | testArry
004FF804 | estArry
我不明白我怎么可能移动了我的数组指针和地址没有改变。
答案 0 :(得分:9)
指针确实发生了变化。你只是不打印它。要打印指针test
:
cout << (void*) test << endl;
&test
是存储test
的内存位置
test
是您使用test++
递增的值(即,您没有增加&test
)。
执行cout << test
时,被operator<<
的重载是一个const char*
的重载并将其视为C风格的字符串,打印它指向的字符。转换为void*
可以避免此行为,以便打印test
的实际值,而不是它指向的值。
答案 1 :(得分:1)
在本声明中
cout << &test << " | " << test << endl;
表达式&test
产生变量test
本身的地址,显然不会改变。它是变量中存储的值。
如果要输出变量test
的值,该值是指向字符串文字内的值,您应该写
cout << ( void * )test << " | " << test << endl;
考虑到程序中存在内存泄漏,因为在分配内存后重新分配指针。 sting文字具有常量字符数组的类型。所以指针测试应该声明为
const char *test;