數組
數組聲明為 數據類型 名稱[ constant-size ],並將一個數據類型的一個或多個實例分組到一個可尋址的位置,constant-size可能是一個表達式,但是該表達式必須求值為常量,例如: #define MAX_SIZE 16 …… int list [MAX_SIZE + 1];
C數組開始於元素0,所以像陣列定義 int a[3];將創建三個int元件,可尋址如a[0],a[1],和a[2]請注意,即使定義很難說a[3],也沒有名為a[3]
與其他變量一樣,全局和靜態數組元素默認情況下初始化為0,並且自動數組元素填充有垃圾值
可以使用大括號中的一個或多個值來初始化數組,例如int a[3] = {5, -2, 17};ANSI C之前的編譯器可能不允許在自動數組上進行初始化
如果存在初始化值列表,但未 指定常量大小,則數組的大小與初始化值的數目相同int q[] = {1, 2, 3}; 是相同的。int q[3] = {1, 2, 3};
要聲明對另一個文件中定義的數組的外部引用,請使用extern int a[];
字符串常量
在C語言中,類型數組char用於表示字符串,字符串的結尾由設置為0的字節標記(也稱為NUL字符)
以下定義都將其數組設置為相同的值: int str1 [] = {'a','b','c','\ 0'}; int str2 [] =「 abc」;
ANSI C還允許定義像int str[3] = "abc"; ,即是相同的int str[3] = {'a', 'b', 'c'}; (省略了最終NUL字符)
指針
指針是包含變量地址的變量
有兩個與指針關聯的運算符:該&操作符返回其參數的地址、*取消引用它的參數通過指針訪問對象指針
指針的一個簡單示例是: int i,j; int * p; / *指向'int'的指針* / i= 6; p =&i; / *將`p'設置為`i'的地址* / j = * p; / *將'j'設置為6('i'的值)* / * p = 5; / *將'i'設置為5 * /
指針可以包含一個地址或一個稱為空指針的特殊值,該 值不同於所有有效指針指針上下文中的0將在編譯時轉換為空指針還有一個預處理器宏NULL(在<stdio.h>或定義 <stdlib.h>)像expression這樣的表達式將導致語句是否為空指針,因此代碼將與空指針 進行隱式比較if (!ptr) statementptrif (ptr)if (ptr == 0)0ptr。