簡體   English   中英

這在c中意味着什么? char * array [] = {“**”,“**”,“**”};

[英]What does that mean in c? char *array[]= { “**”, “**”, “**” };

在我讀到的一些代碼中,有一個像這樣的初始化語句

char *array[]= { "something1", "something2", "something3" };

這意味着什么,該指針實際指向什么? 如何在內存中分配,以及如何訪問該數組中元素的每個元素和每個字符?

---編輯---請問這個例子在char數組之間有什么區別[3]; 和char * array [3]; ---編輯---

那是什么意思 ?

它正在初始化一個包含三個值的字符串數組( char * )(三個指向空終止字符串的指針)

那個指針指向什么?

它應該指向char*數組中的第一個元素

怎么分配在內存中?

它將分配足夠的內存來存儲三個字符串,后跟null-terminators,以及指向這些字符串的三個指針:

array --> pointer to three sequential memory addresses

array[0] --> something1{\0}
array[1] --> something2{\0}
array[2] --> something3{\0}

請注意,字符串可能不一定在順序存儲器中

以及如何訪問每個元素

如果用“element”表示字符串,你可以通過指針循環:

for(int i=0; i<3; i++)
{
    char* element = array[i];
}

以及該數組中元素的每個字符

好吧,您可以使用數組語法( element[i] )訪問字符,但我建議使用C字符串函數以確保安全(因此您不必擔心訪問字符串范圍之外的內存)

這是一種在創建數組的同時初始化數組的方法。

這段代碼

char *array[]= { "a", "b", "c" };

將與此代碼具有相同的結果。

char *array[3];

array[0] = "a";
array[1] = "b";
array[2] = "c";

這是獲取更多信息的好來源。

http://www.iu.hio.no/~mark/CTutorial/CTutorial.html#Strings

編輯:

char array[3]; 是一個3 char的數組。 char *array[3]; 是一個3個指向char的數組。

C中的char *是一個字符串。

array是要聲明的變量的名稱。

[]表示它是一個數組。

{ "something1", "something2", "something3" }正在初始化數組的內容。

訪問元素的方式如下:

array[0]給出第一個元素 - “something1”。

array[1]給出第二個元素 - “something2”。

等等

注意:

正如評論中指出的那樣, char *在技​​術上並不是一個字符串。

它是一個指向char的指針。 您可以在內存中可視化字符串,如下所示:

<-------------------------->
..134|135|136|137|138|139|..
<-------------------------->
  'H'|'e'|'l'|'l'|'o'|'\0'
<-------------------------->

該存儲器塊(位置134-139)保持字符串。

例如:

array[0]實際上返回指向“something1”中第一個字符的指針。

您可以使用以下事實:字符在內存中按順序以各種方式訪問​​字符串的其余部分:

/* ch points to the 's' */
char* ch = array[0];

/* ch2 points to the 'e' */
char* ch2 = ch + 3;

/* ch3 == 'e' */
char ch3 = *ch2;

/* ch4 == 'e' */
char ch4 = *(ch + 3);

/* ch5 == 'e' */
char ch5 = ch[3];

這定義了一個char指針數組(又名“c strings”)。

要訪問您可以執行的內容:

for (int i=0; i<sizeof(array)/sizeof(char*); i++) {
    printf("%s", array[i]);
}

它將array聲明為一個包含3個指向char指針的數組,其3個元素初始化為指向相應字符串的指針。 內存是為數組本身(3個指針)和字符串分配的。 字符串內存是靜態分配的。 如果聲明在函數內部,則靜態地(如果聲明在所有函數之外)或動態(通常在CPU的執行堆棧上)分配數組的內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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