[英]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.