技術總結:
在進行軟件開發(fā)的時候,技術迭代更新速度極快。而想要快速掌握這些技術,需要非常扎實的基礎才行。那么,現(xiàn)在我們就來談一談程序員的開端——C語言。C語言中,最困難的兩大知識點就當屬指針與函數(shù)。指針的困難點倒不是在于它本身,困難的是指針與其他數(shù)據(jù)類型相結合,其形成的組合種類較多,最后導致指針難以理解。下面,我們就先從指針說起。
指針的基礎:
指針的概念:
指針實際上就是地址。指針是在計算機自動在內存中分配的一塊空間,該空間用來存儲地址(該空間大小由操作系統(tǒng)來決定,64位操作系統(tǒng),需要用64位,也就是8字節(jié)空間來保存地址),而存儲的這個地址,是該指針所指向的那塊空間的首地址。int *p = &A;
我們想要通過指針取到A空間中的數(shù)據(jù),可以使用*p來。ㄗ⒁猓*p表示的是A這塊空間,而不是A空間中的數(shù)據(jù),就像int A; 變量名A,表示的是A這個空間)。而A空間的首地址可以由p或&A來表示。
這樣,指針的本質就講完了,是不是很就簡單?但這只是開始。
指針的組合:
指針與數(shù)組的組合:
指針與數(shù)組的組合有很多,如:數(shù)組指針,多級指針,函數(shù)指針,結構體指針。數(shù)組指針中,比較難理解的就是,指針與二維數(shù)組的組合。想要弄清楚指針與二維數(shù)組的組合,我們先來看一維數(shù)組。一維數(shù)組的。。。。。。
函數(shù)的基礎:
函數(shù)的概念:
函數(shù)實際上就是程序的跳轉,即先將當前程序的狀態(tài)保存在棧中,然后跳轉到相對應的函數(shù)內,依次執(zhí)行函數(shù)內的程序指令。當函數(shù)執(zhí)行完后,函數(shù)被釋放,然后恢復之前保存在棧中的程序狀態(tài),再接著往下執(zhí)行程序。
我們之所以需要函數(shù),主要還是因為我們不可能將一個項目中的所有程序指令都寫在main函數(shù)中去,一旦項目復雜的話,對程序的修改和調試將是一場災難。如下圖:
所以在做項目的時候,我們保證項目高內聚,低耦合。這個時候就需要函數(shù)來將代碼封裝起來了。我們常常使用的函數(shù)都是封裝起來的,而使用函數(shù)的難點就在于函數(shù)的參數(shù)如何填寫和判斷函數(shù)的返回值是什么。
函數(shù)的形參與返回值:
函數(shù)的格式: 返回值類型 函數(shù)名字(形參)
函數(shù)填寫:test(arr);(arr是數(shù)組名,也是數(shù)組的首地址)
(注意:如果此時是test(int p),則因為形參為int類型而不是指針類型,所以不能寫成test(arr); 我們可以填寫成test(arr[1]),arr數(shù)組中的每一個元素都為int類型。這樣可以,將arr數(shù)組中的第一個元素傳入到tset函數(shù)中去。)
(注意:在函數(shù)內定義的數(shù)組,在函數(shù)結束后,數(shù)組會被釋放,如果將此數(shù)組作為返回值返回給main函數(shù)的話,由于數(shù)組已經(jīng)被釋放了,所以數(shù)組無法被找到,會發(fā)生錯誤。解決辦法:1.堆 malloc 2.靜態(tài)變量 static)
函數(shù)填寫:xx(test)(test是另外一個函數(shù)的名字)
我們知道,函數(shù)的名字就是函數(shù)的入口也就是函數(shù)的首地址。所以,由此可知函數(shù)指針的本質就是用來保存函數(shù)的首地址(即函數(shù)名)
void (*p)(int)實際上就是,void (*)(int) p(定義了一個指針,其中void (*)(int)為指針類型,p為指針),例如:void (*)(int) p = test;其中p就表示為一個指向函數(shù)test()的函數(shù)指針。前面我們說過,指針實際上就是地址,也就是說void (*)(int) p是一個用來保存函數(shù)text函數(shù)首地址的指針(即用來保存test函數(shù)名字)。但是void (*)(int) p這種格式,C語言標準不認可,我們需要寫成void (*p)(int)這種格式。
xx(int x)是一個函數(shù),其返回值為void(*)(int)函數(shù)指針類型,即其返回值是一個指向其他函數(shù)的指針。注意:xx(int x)是一個函數(shù),而不是一個用來保存地址的指針,所以此時void (*)(int)就為函數(shù)的返回值,而不是指針的指針類型。
好了,到目前為止,函數(shù)基本的使用我們已經(jīng)知道了。但是編程還是需要大量的實踐與理論學習,多看看經(jīng)典的計算機書籍,會讓我們對編程的理解更加深入。