C語言
成都創(chuàng)新互聯(lián)從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目成都做網(wǎng)站、網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元柳南做網(wǎng)站,已為上家服務,為柳南各地企業(yè)和個人服務,聯(lián)系電話:18980820575
指針就是變量的地址;
指針變量就是存放變量地址的變量。
在C語言中指針函數(shù)和函數(shù)指針是兩個不同的概念,不能混淆。
指針函數(shù)本質上是函數(shù),是一個返回類型為指針的函數(shù),如:
int* max(int *array,int n)
{
//找最大值的地址
return 最大值的地址;
}
max就是一個指針函數(shù)。
而函數(shù)指針本質上是指針,是指向函數(shù)的指針,如:
int (*funp)(int a,int b);
funp就是一個函數(shù)指針,可以用它指向一個返回類型為int、有兩個int類型的參數(shù)的函數(shù)。
其實與其你在這里問,還不如看一看c語言教科書,上面寫的都很詳細
以下是譚浩強版的
在計算機中,所有的數(shù)據(jù)都是存放在存儲器中的。一般把存儲器中的一個字節(jié)稱為一個內(nèi)存單元,不同的數(shù)據(jù)類型所占用的內(nèi)存單元數(shù)不等,如整型量占2個單元,字符量占1個單元等,在前面已有詳細的介紹。為了正確地訪問這些內(nèi)存單元,必須為每個內(nèi)存單元編上號。根據(jù)一個內(nèi)存單元的編號即可準確地找到該內(nèi)存單元。內(nèi)存單元的編號也叫做地址。
既然根據(jù)內(nèi)存單元的編號或地址就可以找到所需的內(nèi)存單元,所以通常也把這個地址稱為指針。
內(nèi)存單元的指針和內(nèi)存單元的內(nèi)容是兩個不同的概念。
可以用一個通俗的例子來說明它們之間的關系。我們到銀行去存取款時,
銀行工作人員將根據(jù)我們的帳號去找我們的存款單,
找到之后在存單上寫入存款、取款的金額。在這里,帳號就是存單的指針,
存款數(shù)是存單的內(nèi)容。對于一個內(nèi)存單元來說,單元的地址即為指針,其中存放的數(shù)據(jù)才是該單元的內(nèi)容。在C語言中,允許用一個變量來存放指針,這種變量稱為指針變量。因此,一個指針變量的值就是某個內(nèi)存單元的地址或稱為某內(nèi)存單元的指針。
嚴格地說,一個指針是一個地址,是一個常量。而一個指針變量卻可以被賦予不同的指針值,是變量。但常把指針變量簡稱為指針。為了避免混淆,我們中約定:“指針”是指地址,是常量,“指針變量”是指取值為地址的變量。定義指針的目的是為了通過指針去訪問內(nèi)存單元。
既然指針變量的值是一個地址,那么這個地址不僅可以是變量的地址,也可以是其它數(shù)據(jù)結構的地址。在一個指針變量中存放一個數(shù)組或一個函數(shù)的首地址有何意義呢?
因為數(shù)組或函數(shù)都是連續(xù)存放的。通過訪問指針變量取得了數(shù)組或函數(shù)的首地址,也就找到了該數(shù)組或函數(shù)。這樣一來,凡是出現(xiàn)數(shù)組,函數(shù)的地方都可以用一個指針變量來表示,只要該指針變量中賦予數(shù)組或函數(shù)的首地址即可。這樣做,將會使程序的概念十分清楚,程序本身也精練,高效。在C語言中,一種數(shù)據(jù)類型或數(shù)據(jù)結構往往都占有一組連續(xù)的內(nèi)存單元。
用“地址”這個概念并不能很好地描述一種數(shù)據(jù)類型或數(shù)據(jù)結構,而“指針”雖然實際上也是一個地址,但它卻是一個數(shù)據(jù)結構的首地址,它是“指向”一個數(shù)據(jù)結構的,因而概念更為清楚,表示更為明確。
這也是引入“指針”概念的一個重要原因。
簡言之,函數(shù)指針就是指向函數(shù)(函數(shù)入口地址)的指針,指針函數(shù)就是返回數(shù)據(jù)類型為指針的函數(shù)
函數(shù)指針:void (*fun)(); 指針函數(shù):type *fun();其中type為數(shù)據(jù)類型,比如char,int等等
指針其實是一個整形變量,與其它數(shù)據(jù)不同的是,它的作用是用來存儲其它變量的地址。指針(Pointer)是編程語言中的一個對象,利用地址,它的值直接指向(points to)存在電腦存儲器中另一個地方的值。由于通過地址能找到所需的變量單元,可以說,地址指向該變量單元。
因此,將地址形象化的稱為“指針”。意思是通過它能找到以它為地址的內(nèi)存單元。
再打個比方:有個人讓你去麥當勞幫我買個雪糕,那么麥當勞是這個變量a,但是那個人現(xiàn)在把麥當勞所在的地址寫在紙上給你,那么這張紙就可以看做一個指向麥當勞的指針。
擴展資料:
舉例說明:
int p; //這是一個普通的整型變量。
int *p; //首先從P 處開始,先與*結合,所以說明P 是一個指針,然后再與int 結合,說明指針所指向的內(nèi)容的類型為int 型.所以P是一個返回整型數(shù)據(jù)的指針。
int p[3]; //首先從P 處開始,先與[]結合,說明P 是一個數(shù)組,然后與int 結合,說明數(shù)組里的元素是整型的,所以P 是一個由整型數(shù)據(jù)組成的數(shù)組 。
int *p[3]; //首先從P 處開始,先與[]結合,因為其優(yōu)先級比*高,所以P 是一個數(shù)組,然后再與*結合,說明數(shù)組里的元素是指針類型,然后再與int 結合,說明指針所指向的內(nèi)容的類型是整型的,所以P 是一個由返回整型數(shù)據(jù)的指針所組成的數(shù)組。
int (*p)[3]; //首先從P 處開始,先與*結合,說明P 是一個指針然后再與[]結合(與"()"這步可以忽略,只是為了改變優(yōu)先級),說明指針所指向的內(nèi)容是一個數(shù)組,然后再與int 結合,說明數(shù)組里的元素是整型的.所以P 是一個指向由整型數(shù)據(jù)組成的數(shù)組的指針。
int **p; //首先從P 開始,先與*結合,說是P 是一個指針,然后再與*結合,說明指針所指向的元素是指針,然后再與int 結合,說明該指針所指向的元素是整型數(shù)據(jù)。由于二級指針以及更高級的指針極少用在復雜的類型中,所以后面更復雜的類型就不考慮多級指針了,最多只考慮一級指針。
int p(int); //從P 處起,先與()結合,說明P 是一個函數(shù),然后進入()里分析,說明該函數(shù)有一個整型變量的參數(shù),然后再與外面的int 結合,說明函數(shù)的返回值是一個整型數(shù)據(jù)。
Int (*p)(int); //從P 處開始,先與指針結合,說明P 是一個指針,然后與()結合,說明指針指向的是一個函數(shù),然后再與()里的int 結合,說明函數(shù)有一個int 型的參數(shù),再與最外層的int 結合,說明函數(shù)的返回類型是整型。
所以P 是一個指向有一個整型參數(shù)且返回類型為整型的函數(shù)的指針。
int *(*p(int))[3]; //可以先跳過,不看這個類型,過于復雜從P 開始,先與()結合,說明P 是一個函數(shù),然后進入()里面,與int 結合,說明函數(shù)有一個整型變量參數(shù),然后再與外面的*結合,說明函數(shù)返回的是一個指針。
然后到最外面一層,先與[]結合,說明返回的指針指向的是一個數(shù)組。然后再與*結合,說明數(shù)組里的元素是指針,然后再與int 結合,說明指針指向的內(nèi)容是整型數(shù)據(jù).所以P 是一個參數(shù)為一個整數(shù)據(jù)且返回一個指向由整型指針變量組成的數(shù)組的指針變量的函數(shù).
參考資料:百度百科-指針
我們都知道:C語言中的數(shù)組是指 一類 類型,數(shù)組具體區(qū)分為 int 類型數(shù)組,double類型數(shù)組,char數(shù)組 等等。同樣指針 這個概念也泛指 一類
數(shù)據(jù)類型,int指針類型,double指針類型,char指針類型等等。
通常,我們用int類型保存一些整型的數(shù)據(jù),如 int num = 97 , 我們也會用char來存儲字符: char ch = 'a'。
我們也必須知道:任何程序數(shù)據(jù)載入內(nèi)存后,在內(nèi)存都有他們的地址,這就是指針。而為了保存一個數(shù)據(jù)在內(nèi)存中的地址,我們就需要指針變量。
因此:指針是程序數(shù)據(jù)在內(nèi)存中的地址,而指針變量是用來保存這些地址的變量。