char *指向元素而不是地址

时间:2016-03-19 18:45:14

标签: c++ arrays pointers

void reverse(char * str){
    char * end = str;
    cout << "str" << str << endl;//ABCDE
    cout << "end" << end << endl;//ABCDE
    char tmp;
    if(str){
        while(*end){++end; cout << end << endl;}//ABCDE-->BCDE-->CDE-->DE-->E--> NULL
        --end;//end=E
        cout <<"--end" << end << endl;
        while(str<end){// do swap
            tmp = *str;//*str = str[0] 
            *str++ = *end;//*end = last ele in str[]
            *end-- = tmp;
        }
    }
}

我的输入是

char test[] = "ABCDE";
cout << test << endl; //ABCDE
reverse(test);
cout << test << endl; //EDCBA

我对指针感觉不太好,因为c ++入门书说char *指向数组的第一个元素,但是当我输出指针结束时,它是数组的内容而不是地址。

另外,反向(测试),我的意思是将数组中第一个元素的地址赋给指针,但结果是将整个元素赋给指针。

2 个答案:

答案 0 :(得分:1)

对于char*

char *test = "ABCDE"; std::cout << (void *) test << std::endl; overloaded to print strings

尝试:

while( out.atEnd() == false ) {
  MyObject entry;
  out >> entry;
  entries.push_back(entry);  
}

答案 1 :(得分:1)

char*变量是指向char的指针。 char[]是一个char数组。现在,可以通过指针访问char数组,对于char*,它通常用于字符串处理(虽然对于其他类型使用它,但对于char它更常见)。

char test[6] = "ABCDE";
char *start = &test[0]; // will point on A

使用指针访问数组可以使用指针算法完成:

char *end = start + 5; // equivalent to char *end = &test[5]

现在你做的时候:

cout << test;

cout << start;

实际上调用operator<<的重载需要const char*。这个操作符的作用是它从传递的指针开始打印char,直到它到达一个空字符('\ 0')。

如果要打印指针中包含的地址而不是字符串,则必须将其强制转换为void*

cout << static_cast<void*>(start);