這堆疊, 字串陣列與字串指標

2022-03-15 21:58:25 字數 1787 閱讀 3673

今天還在做著小作業,終於把框架大體搭好,準備脫離stl用c語言來解析字串。卻碰到了諸多問題。

原來堆疊基本不太懂,現在稍稍知道了,還有字串指標和陣列的區別。哎

簡單的寫了幾個定義和初始化字串的方式

char *szname1 = "  dir \ad\ what are you doing"; //  q全域性const區域

char szname2 = "  dir \ad\ what are you doing";//棧 區

char *szname3 = new char[64];                   //堆區

szname3 = "  dir \ad\what are you doing";

char *szname4 = szname2;                      //棧區的指標指向棧區的記憶體

debug一看,原來果真只有 szname[2]是char型

debug資訊:

-  szname1 0x0041564c "  dir dwhat are you doing" char *

32 ' ' char

-  szname3 0x0041564c "  dir dwhat are you doing" char *

32 ' ' char

-  szname4 0x0012ff38 "  dir dwhat are you doing" char *

32 ' ' char

-  szname2 0x0012ff38 "  dir dwhat are you doing" char [27]

[0] 32 ' ' char

[1] 32 ' ' char

[2] 100 'd' char

......

我理解是:

指標儲存的僅僅是這個串的首位址,而串陣列儲存了整個串的資訊,陣列名可以用來訪問首位址,但並不是乙個指標!

我寫了乙個函式是要傳遞指標的指標,當我把szname1, szname3, szname4取位址傳過去可以,但是傳遞&szname2就不行了,提示錯誤是不能實現陣列的指標向指標的指標 轉換。

我曾經試圖傳遞指標的引用來實現修改字串指標的功能,szname1, szname3, szname4也可以實現引用的傳遞,而szname2 還是不行。其實我想得到乙個官方的解釋,暫時就先這樣理解了。

char amessage = "now is the time"; /* an array */

實際上等同於

char amessage[16] ;

strcpy(amessage, "now is the time" ;

16是字串"now is the time"的長度加1.

可以看出記憶體空間是分配在棧上的.

char *pmessage = "now is the time"; /* a pointer */

而pmessage指向的內容始終是常量,不可能被改變的.

而p = strdup(a)實際上等同於

p = (char*)malloc(strlen(a) + 1) ;

strcpy(p, a) ;

可以看出來,strdup返回的指標指向的是在堆上新分配的記憶體.

要修改也是修改新分配的記憶體空間中的內容.不是原來a指向的內容.

程式**:

#include "stdio.h"

#include  "string.h"

const int max_length = 256;

void strrestrex(char **pnewstr, char c)

字串,字串陣列,字串指標!!

字串 字元陣列實際上是一系列字元的集合,也就是 字串 string 字串陣列 在c語言中,沒有專門的字串變數,沒有string型別,通常就用乙個字元陣列來存放乙個字串。c語言規定,可以將字串直接賦值給字元陣列 在c語言中,字串總是以 0 作為串的結束符。上面的兩個字串,編譯器已經在末尾自動新增了 0...

字串,陣列,堆,棧

0 2 1 4 3 9 5 8 6 7 是以陣列形式儲存的最小堆,刪除堆頂元素0後的結果是 a.2 1 4 3 9 5 8 6 7 b.1 2 5 4 3 9 8 6 7 c.2 3 1 4 7 9 5 8 6 d.1 2 5 4 3 9 7 8 6 正確答案 d 第二,堆是一種經過排序的完全二叉樹...

C 字串指標與字串陣列

在做面試100題中第21題時,發現char astr abcdefghijk 0 和char astr 有點區別,以前一直以為是一樣的,但是在該程式中採用字串指標執行一直出錯。後來在網上查查,果然發現大大的不同。分析 當你需要修改字串時,採用指標指向該字串編譯通過但是執行出錯,而採用字串陣列時不會出...