簡體   English   中英

char * 指向元素而不是地址

[英]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),我的意思是將數組中第一個元素的地址提供給指針,但結果是將整個元素提供給指針。

std::cout重載以打印char* 字符串

嘗試:

char *test = "ABCDE";
std::cout << (void *) test << std::endl;

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM