2017計算機二級C語言考點解析
大家在備考計算機二級考試時要掌握考點,這樣複習才有方向,以下是本站小編整理的計算機二級C語言考點解析,更多計算機二級考試資訊請繼續關注應屆畢業生考試網。
8.1 指標與指標變數的概念,指標與地址運算子
1.在C語言中,指標是指一個變數的地址,通過變數的地址″指向″的位置找到變數的值,這種″指向″變數地址可形象地看作″指標″。用來存放指標的變數稱為指標變數,它是一種特殊的變數,它存放的是地址值。
2.定義指標變數的一般形式為:
型別名 *指標變數1,*指標變數2,…;
″型別名″稱為″基型別″它規定了後面的指標變數中存放的資料型別,″*″號表明後面的″指標變數1″,″指標變數2″等是指標變數,″*″號在定義時不能省略,否則就會變成一般變數的定義了。″指標變數1″,″指標變數2″等稱為指標變數名。
3.一個指標變數只能指向同一型別的變數。
4.與指標和指標變數有關的兩個運算子:
(1)*:指標運算子(或稱″間接訪問″運算子)
(2)&:取地址運算子
通過*號可以引用一個儲存單元,如有如下定義:
int i=123,*p,k;
則 p=&I;或k=*p;或k=*&I;都將變數i中的值賦給k。
*p=10;或*&i=10;都能把整數10賦給變數i。這裡,等號左邊的表示式*p和*&i都代表變數i的儲存單元。
8.2 變數、陣列、字串、函式、結構體的指標以及指向它們的指標變數
1.變數的指標和指向變數的指標變數。
2.陣列的指標和指向陣列的指標變數。
所謂陣列的指標是指陣列的起始地址,陣列元素的指標是陣列元素的地址。
C語言規定陣列名代表陣列的首地址,也就是第一個元素的地址。
3.字串的指標和指向字串的指標變數。
我們可以通過定義說明一個指標指向一個字串。
C語言將字串隱含處理成一維字元陣列,但陣列的每個元素沒有具體的名字,這一點跟字元陣列不一樣。要引用字串中的某個字元,只能通過指標來引用:*(s+0),*(s+1),…,*(s+n)。
4.函式的指標和指向函式的指標變數。
指向函式的指標變數的一般形式為 :
資料型別識別符號 (*指標變數名)();
這裡的″資料型別識別符號″是指函式返回值的型別。
函式的呼叫可以通過函式名呼叫,也可以通過函式指標呼叫(即用指向函式的指標變數呼叫)。
指向函式的指標變量表示定義了一個指向函式的指標變數,它不是固定指向哪一個函式,而只是定義了這樣的一個型別變數,它專門用來存放函式的入口地址。在程式中把哪一個函式的地址賦給它,它就指向哪一個函式。在一個程式中,一個指標變數可以先後指向不同的函式。
在給函式指標變數賦值時,只需給出函式名而不必給出引數。因為函式指標賦的值僅是函式的入口地址,而不涉及到實參與形參的結合問題。
對指向函式的指標變數,表示式p+n,p++,p--等都無意義。
5.結構體的指標與指向結構體的指標變數
一個結構體變數的指標就是該變數所佔據的記憶體段的起始地址。可以設一個指標變數,用來指向一個結構體變數,此時該指標變數的值是結構體變數的起始地址。指標變數也可以用來指向結構體陣列中的元素。
8.3 用指標做函式引數
函式的引數不僅可以是整型、實型、字元型等資料,還可以是指標型別,它的作用是將一個變數的地址傳送到另一個函式中。
8.4 返回指標值的指標函式
一個函式可以返回一個整型值、字元值、實型值等,也可以返回指標型資料 ,即地址這種帶回指標值的函式,一般的定義形式為:
型別識別符號 *函式名(形參表);
8.5 指標陣列、指向指標的指標
1.指標陣列指的是一個數組,其元素均為指標型別資料,也就是說,指標陣列中的每一個元素都是指標變數。指標陣列的定義形式為:
型別標識 *陣列名[陣列長度說明]
指標陣列可以使字串處理更加方便。
2.指向指標的指標是指指向指標資料的指標變數,一個指向指標資料的指標變數的一般形式為:
型別標識 * *p;
8.6 main函式的命令引數
指標陣列的一個重要應用是作為main函式的形參,一般來說,main函式後的括號中是空的,即沒有引數。實際上main可以有引數,如:
main(argc,argv)
其中,argc和argv就是main函式的形參。其他函式形參的值可以通過函式呼叫語句的實參中得到,由於main函式是由系統呼叫的,因而main函式的形參值不能從程式中得到,但可以在作業系統狀態下,將實參和命令一起給出,從而使main函式的形參得到值。命令列的一般形式為:
命令名 引數1 引數2…引數n
命令名和各引數之間用空格分隔開。
8.7 動態儲存分配
在C語言中有一種稱為“動態儲存分配”的記憶體空間分配方式:程式在執行期間需要儲存空間時,通過“申請”分配指定的記憶體空間;當閒置不用時,可隨時將其釋放,由系統另作它用。本節介紹C語言中動態分配系統的主要函式:malloc()、calloc()、free()及realloc(),使用這些函式時,必須在程式開頭包含檔案stdlib.h。
1.主記憶體分配函式—malloc()
函式格式:void*malloc(unsigned size);
函式功能:從記憶體中分配一大小為size位元組的塊。
引數說明:size為無符號整型,用於指定需要分配的記憶體空間的位元組數。
返回值:新分配記憶體的地址,如無足夠的記憶體可分配,則返回NULL。
說明:當size為0時,返回NULL。
2.主記憶體分配函式——calloc()
函式格式:void*malloc(unsigned n,unsigned size);
函式功能:從記憶體中分配n個同一型別資料項的連續儲存空間,每個資料項的大小為size位元組。
引數說明:n為無符號整型,用於指定分配的資料項的個數size為無符號整型,用於指定需要分配的資料項所佔記憶體空間的位元組數。
返回值:新分配記憶體的地址,如無足夠的記憶體可分配,則返回NULL。
3.重新分配記憶體空間函式——realloc()
函式格式:void*realloc(void *block,unsigned size);
函式功能:將block所指記憶體區的'大小改為size位元組的塊。
引數說明:block為void型別的指標,指向記憶體中某塊,size為無符號整型,用於指定需要分配的記憶體空間的位元組數。
返回值:新分配記憶體的地址,如無足夠的記憶體可分配,則返回NULL。
4.釋放記憶體函式—free()
函式格式:void free(void*block);
函式功能:將calloc()、malloc()及realloc()函式所分配的記憶體空間釋放為自由空間。
引數說明:block為void型別的指標,指向要釋放的記憶體空間。
返回值:無。
9.1 一維陣列的定義、初始化和引用
1.一維陣列的定義方式為:
型別說明符 陣列名[常量表達式]
(1)陣列名的命名方法與變數名相同,遵循識別符號命名規則;
(2)陣列是用方括號括起來的常量表達式,不能用圓括號;
(3)常量表達式表示陣列元素的個數,即陣列的長度,陣列的下標從0開始,下標的最大值為:常量表達式-1;
(4)常量表達式中可以包括常量和符號常量,不能包括變數。
可以用賦值語句或輸入語句使陣列中的元素得到值,但要佔用執行時間。可以使陣列在執行之前初始化,即在編譯階段使之得到初值。
2.對陣列初始化可以用以下方法實現:
(1)在定義陣列時對陣列元素賦以初值。如:
static int a[10]={0,1,2,3,4,5,6,7,8,9};
經過上面的定義和初始化後,a[0]=0,a[1]=1,…,a[9]=9。
(2)初始化時可以只對一部分元素賦初值。例如:
static int a[10]={0,1,2,3,4};
定義的陣列有10個元素,但只對其中前5個元素賦了初值,後5個元素初值為0。
(3)如果想使一個數組的元素值全部為0,可以用下面的方法:
static int a[10]={0,0,0,0,0,0,0,0,0,0};
不能用:
static int a[10]={0*10};
如果對static型陣列不賦初值,系統會對定義的所有陣列元素自動賦以0值。
(4)在對全部陣列元素賦初值時,可以不指定陣列長度。
3.一維陣列的引用方法是:
C語言規定不能一次引用整個陣列,引用時只能逐個元素引用,陣列元素的表示形式為:
陣列名[下標]
下標可以是整型常量或整型表示式。如:
a[0]=a[5]+a[7]-a[2*3];
9.2 二維陣列的定義、初始化和引用
1.二維陣列定義的一般形式為
型別說明符陣列名[常量表達式][常量表達式]
C語言採用上述定義方法,我們可以把二維陣列看做是一種特殊的一維陣列:它的元素又是一維陣列。在C語言中,二維陣列中元素的排列順序是:先按行存放,再按列存放,即在記憶體中先順序存放第一行的元素,再存放第二行的元素。
2.二維陣列的初始化:二維陣列可以用下面的方法初始化:
(1)分行給二維陣列賦初值。如:
static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
以上賦值把第一個花括號內的資料賦給第一行元素,第二個花括號內資料賦給第二元素…,即按行賦值。
(2)可以將所有的資料寫在一個花括號內,按陣列排列的順序對各元素賦值。
(3)可以對陣列的部分元素賦初值。如:
static int a[3][4]={{1},{5},{9}};
以上賦值的結果是:陣列第一列的元素分別賦了初值1,5,9,其餘元素的值都是0。
(4)如果對二維陣列的全部元素都賦初值,則定義陣列時對第一維的長度可以不指定,但第二維的長度不能省。
3.二維陣列的引用:二維陣列的元素可以表示為:
陣列[下標][下標]
在引用二維陣列時,必須是單個元素,不能是整個陣列名。下標可以是一個表示式,但不能是變數。如果下標是一個表示式,注意表示式的值不能超出陣列定義的上、下限。