簡體   English   中英

C指針和數組聲明

[英]C pointers and array declaration

我正在通過“ 艱難地學習C”來學習C語言

我在一些示例代碼中有點困惑,為什么有些數組必須用指針初始化。

 int ages[] = {23, 43, 12, 89, 2}; 
  char *names[] = {
      "Alan", "Frank",
      "Mary", "John", "Lisa"
  }; 

在上面的例子中,為什么名稱[]數組在聲明時需要指針? 你怎么知道在創建數組時何時使用指針?

字符串文字(如"Alan" )的類型為char[5] ,並指向字符串的開頭,使用char * "Alan"本身由以下部分組成:

{ 'A', 'L', 'A', 'N', '\0' }

你可以看到它由多個char 這個char * 指向字符串的開頭,字母'A'

由於您需要這些字符串數組 ,然后將[]添加到您的聲明中,因此它變為: char *names[]

使用字符串文字時,首選const指針。

 const char *names[] = {
      "Alan", "Frank",
      "Mary", "John", "Lisa"
  }; 

在聲明中, name是一個const char指針數組,這意味着它對cstrings保存了5個char* 當你想使用指針時,你使用指針就這么簡單。

例:

const char *c = "Hello world";

因此,當您在數組中使用它們時,您將創建5個指向字符串文字的const char*指針。

因為數組的內容是char* 另一個例子有一個int “Alan”是一個字符串,在C語言中,您將字符串聲明為char pointers

char *names[]的情況下,您聲明了一個字符串指針數組。

C中的字符串,例如"Alan"是內存中的一系列字符,以標記字符串結尾的\\ 0值結束

所以聲明你正在這樣做

names[0] -> "Alan\0"
names[1] -> "Frank\0"
...

然后你可以使用names [n]作為指向字符串的指針

printf( "%s:%d", names[0], strlen(names[0]) );

輸出"Alan:4"

不需要使用“指針數組”。

以下內容也適用。 它是一個20字節字符數組的數組。 編譯器只需要知道數組中事物的大小,而不是數組的長度。 你最終得到的是一個包含5個20個字節元素的數組,每個元素都有一個名稱。

#include <stdio.h>

char names[][20] = {
  "Alan", "Frank",
  "Mary", "John", "Lisa"
};

int main(int argc, char *argv[])
{
  int   idx;

  for (idx = 0; idx < 5; idx++) {
    printf("'%s'\n", names[idx]);
  }
}

在您的示例中,數組中的事物的大小是“指向char的指針”。 字符串常量可用於初始化“指向char的指針”或“char數組”。

暫無
暫無

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

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