欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
C/C 中字符指針數組及指向指針的指針的含義
C/C++中字符指針數組及指向指針的指針的含義 
 

  就指向指針的指針,很早以前在說(shuō)指針的時(shí)候說(shuō)過(guò),但后來(lái)發(fā)現很多人還是比較難以理解,這一次我們再次仔細說(shuō)一說(shuō)指向指針的指針。

  先看下面的代碼,注意看代碼中的注解:

#include <iostream
#include <string
using namespace std; 
 
void print_char(char* array[],int len);//函數原形聲明 
 
void main(void)   

//-----------------------------段1----------------------------------------- 
    char *a[]={"abc","cde","fgh"};//字符指針數組 
    char* *b=a;//定義一個(gè)指向指針的指針,并賦予指針數組首地址所指向的第一個(gè)字符串的地址也就是abc\0字符串的首地址 
    cout<<*b<<"|"<<*(b+1)<<"|"<<*(b+2)<<endl; 
//------------------------------------------------------------------------- 
 
//-----------------------------段2----------------------------------------- 
    char* test[]={"abc","cde","fgh"};//注意這里是引號,表示是字符串,以后的地址每加1就是加4位(在32位系統上) 
    int num=sizeof(test)/sizeof(char*);//計算字符串個(gè)數 
    print_char(test,num); 
    cin.get(); 
//------------------------------------------------------------------------- 

 
void print_char(char* array[],int len)//當調用的時(shí)候傳遞進(jìn)來(lái)的不是數組,而是字符指針他每加1也就是加上sizeof(char*)的長(cháng)度 

    for(int i=0;i<len;i++) 
    { 
        cout<<*array++<<endl; 
    } 
}

  下面我們來(lái)仔細說(shuō)明一下字符指針數組和指向指針的指針,段1中的程序是下面的樣子:

char *a[]={"abc","cde","fgh"}; 
char* *b=a; 
cout<<*b<<"|"<<*(b+1)<<"|"<<*(b+2)<<endl;

  char *a[]定義了一個(gè)指針數組,注意不是char[], char[]是不能同時(shí)初始化為三個(gè)字符的,定義以后的a[]其實(shí)內部有三個(gè)內存位置,分別存儲了abc\0,cde\0,fgh\0,三個(gè)字符串的起始地址,而這三個(gè)位置的內存地址卻不是這三個(gè)字符串的起始地址,在這個(gè)例子中a[]是存儲在??臻g內的,而三個(gè)字符串卻是存儲在靜態(tài)內存空間內的const區域中的,接下去我們看到了char* *b=a;這里是定義了一個(gè)指向指針的指針,如果你寫(xiě)成char *b=a;那么是錯誤的,因為編譯器會(huì )返回一個(gè)無(wú)法將char* *[3]轉換給char *的錯誤,b=a的賦值,實(shí)際上是把a的首地址賦給了b,由于b是一個(gè)指向指針的指針,程序的輸出cout<<*b<<"|"<<*(b+1)<<"|"<<*(b+2)<<endl;

  結果是

abc
cde
fgh

  可以看出每一次內存地址的+1操作事實(shí)上是一次加sizeof(char*)的操作,我們在32位的系統中sizeof(char*)的長(cháng)度是4,所以每加1也就是+4,實(shí)際上是*a[]內部三個(gè)位置的+1,所以*(b+1)的結果自然就是cde了,我們這時(shí)候可能會(huì )問(wèn),為什么輸出是cde而不是c一個(gè)呢?答案是這樣的,在c++中,輸出字符指針就是輸出字符串,程序會(huì )自動(dòng)在遇到\0后停止.

  我們最后分析一下段2中的代碼,段2中我們調用了print_array()這個(gè)函數,這個(gè)函數中形式參數是char *array[]和代碼中的char *test[]一樣,同為字符指針,當你把參數傳遞過(guò)來(lái)的時(shí)候,事實(shí)上不是把數組內容傳遞過(guò)來(lái),test的首地址傳遞了進(jìn)來(lái),由于array是指針,所以在內存中它在棧區,具有變量一樣的性質(zhì),可以為左值,所以我們輸出寫(xiě)成了,cout<<*array++<<endl;當然我們也可以改寫(xiě)為cout<<array[i]<<endl,這里在循環(huán)中的每次加1操作和段1代碼總的道理是一樣的,注意看下面的圖!

  到這里這兩個(gè)非常重要的知識點(diǎn)我們都說(shuō)完了,說(shuō)歸說(shuō),要想透徹理解希望讀者多動(dòng)手,多觀(guān)察,熟能生巧。

  下面是內存結構示意圖:

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
字符指針的特殊之處
(const) char *轉CString 詳解(字符串類(lèi)型轉換詳解,不斷補充)
C++字符串與指針
字符串文字量
csdn(18條消息) 2021版C++教程,C++進(jìn)階教程(最全C++教程)
C++ String
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久