[英]char * point to element not the address
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* 指向數組第一個元素的指針,但是當我輸出指針結尾時,它是數組的內容而不是地址。
另外,reverse(test),我的意思是將數組中第一個元素的地址提供給指針,但結果是將整個元素提供給指針。
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;
它實際上調用了一個帶有const char*
的operator<<
的重載。 該運算符的作用是從傳遞的指針開始打印字符,直到到達空字符('\\0')。
如果要打印指針中包含的地址而不是字符串,則必須將其void*
為void*
:
cout << static_cast<void*>(start);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.