我正在檢查一些示例代碼,而這個代碼讓我很困惑。
#include <stdio.h>
static const char *strings[] = {"one","two","three","four","five",
"six","seven","eight","nine"};
int main()
{
int n = 0;
if (scanf("%d",&n) < 1)
return 1;
if (n >= 1 && n <= 9)
printf("%s",strings[n-1]);
else
printf("Greater than 9");
return 0;
}
1.在這里使用*string 指標而不是字串陣列的目的是什么?
2.為什么我們要同時使用 static 和 const?
uj5u.com熱心網友回復:
- 在這里使用 *string 指標而不是字串陣列的目的是什么?
那里沒有“*string”指標。您可能會將該名稱誤認為strings是指某種string型別。它不是; 這只是作者為陣列選擇的名稱。在 中static const char *strings[], 的型別strings是指向 的指標陣列const char。每個陣列元素都是一個指向 a 的指標char,而不是一個指向字串的指標。
通常使用指向 a 的指標指向char字串的第一個字符。(這種指標可以非正式地稱為指向字串的指標,盡管從技術上講它是指向第一個字符的指標。)
- 為什么我們要同時使用 static 和 const 呢?
這些是無關的。它們一起使用是因為作者想要每個的效果。在此用法中,static表示strings僅在此翻譯單元內部保持已知(正在編譯的源檔案,以及它包含的每個檔案#include)。const建議編譯器不要更改任何字串。這允許編譯器在嘗試通過const限定型別更改資料時生成警告。
(由于 C 語言的歷史,字串字面量的字串沒有正確的型別。允許編譯器將它們放置在標記為只讀的記憶體中并假設它們不會被更改,但它們沒有const- 限定,因為const在語言中首次創建字串文字時不存在。良好的編程習慣是添加const任何用于指向字串文字或其部分的指標。)
uj5u.com熱心網友回復:
- 因為字串不是 C 語言中的型別。字串在標準庫中作為空終止字符陣列處理。這意味著一個字串陣列實際上是一個(指向)字符陣列的陣列
- 這里有2點
- 為什么
static?因為非靜態的全域識別符號具有外部鏈接,并且可能與其他編譯單元中的其他全域識別符號發生沖突。 - 為什么
const?因為字串 litteral ("...") 是不可修改的空終止字符陣列。所以指向字面量字串的指標應該只是一個const char *
- 為什么
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/371815.html
上一篇:CMake無法鏈接自定義庫
下一篇:我想制作一個包含字串矩陣的結構
