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 *指向数组的第一个元素,但是当我输出指针结束时,它是数组的内容而不是地址。
另外,反向(测试),我的意思是将数组中第一个元素的地址赋给指针,但结果是将整个元素赋给指针。
答案 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);