移动数组指针不会改变启动的ADDRESS

时间:2017-03-05 13:43:29

标签: c++ arrays string pointers

我的代码:

#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

我不明白我怎么可能移动了我的数组指针和地址没有改变。

2 个答案:

答案 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;