共享記憶體中使用指標 詳解c 中字元指標陣列的使用

2021-10-18 02:08:26 字數 1418 閱讀 1051

之前有寫過一篇叫c++中動態陣列的使用,今來看看c++中的字元指標陣列的使用。

濤哥:c++中的動態陣列使用​zhuanlan.zhihu.com

指標陣列,就指向指標的指標,很早以前在說指標的時候說過,但後來發現很多人還是比較難以理解,這一次我們再次仔細說一說指向指標的指標。

先看下面的**,注意看**中的註解:

#include #include using namespace std;  

void print_char(char* array,int len);//函式原形宣告

void main(void)

;//字元指標陣列

char* *b=a;//定義乙個指向指標的指標,並賦予指標陣列首位址所指向的第乙個字串的位址也就是abc0字串的首位址

cout字元指標陣列和指向指標的指標,段1中的程式是下面的樣子:

char *a=;

char* *b=a;

cout指標陣列,注意不是char, char是不能同時初始化為三個字元的,定義以後的a其實內部有三個記憶體位置,分別儲存了abc0,cde0,fgh0,三個字串的起始位址,而這三個位置的記憶體位址卻不是這三個字串的起始位址,在這個例子中a是儲存在棧空間內的,而三個字串卻是儲存在靜態記憶體空間內的const區域中的,接下去我們看到了char* *b=a;這裡是定義了乙個指向指標的指標,如果你寫成char *b=a;那麼是錯誤的,因為編譯器會返回乙個無法將char* *[3]轉換給char *的錯誤,b=a的賦值,實際上是把a的首位址賦給了b,由於b是乙個指向指標的指標,程式的輸出cout<

abc

cde

fgh

可以看出每一次記憶體位址的+1操作事實上是一次加sizeof(char*)的操作,我們在32位的系統中sizeof(char*)的長度是4,所以每加1也就是+4,實際上是*a內部三個位置的+1,所以*(b+1)的結果自然就是cde了,我們這時候可能會問,為什麼輸出是cde而不是c乙個呢?答案是這樣的,在c++中,輸出字元指標就是輸出字串,程式會自動在遇到0後停止.

我們最後分析一下段2中的**,段2中我們呼叫了print_array()這個函式,這個函式中形式引數是char *array和**中的char *test一樣,同為字元指標,當你把引數傳遞過來的時候,事實上不是把陣列內容傳遞過來,test的首位址傳遞了進來,由於array是指標,所以在記憶體中它在棧區,具有變數一樣的性質,可以為左值,所以我們輸出寫成了,cout<

到這裡這兩個非常重要的知識點我都說完了,說歸說,要想透徹理解希望讀者多動手,多觀察,熟能生巧。

備註:

C 中使用函式指標

最近專案上遇到這樣的情況,前端發起請求,我這邊需要根據請求中的url判斷呼叫哪個函式方法,由於請求方法時字串,於是乎,一堆if else就出來了,如下所示 if uri abc else if uri bcd 說實話,如果請求的型別少這個if else結構都還好,不是很多,但是有幾十上百個請求的時候...

C 共享指標shared ptr使用

共享指標 shared ptr 是現在的 boost 庫中提供的,並且應該是將來c 1x的標準庫中提供的乙個模板類。在此之前,iso iec 14882 2003 標準庫 中的 自動指標 auto ptr 也有類似的功能。顯然 shared ptr 要比 auto ptr 從功能上來說應該強大一些。...

python 使用共享記憶體 c語言構建記憶體

測試環境 centos7 python3.6.5 首先使用c建立記憶體,這裡的方法是 作為引數讀乙個二進位制資料檔案進去,把檔案的內容作為共享記憶體的內容 定義塊 include include include int main int argc,char ar if argc 2 id shmge...