本文目錄一覽:
- 1、C語言中指針的作用是什麼?
- 2、c語言指針有什麼用
- 3、怎麼理解C語言里的指針?
- 4、C語言中指針是什麼
C語言中指針的作用是什麼?
指針指向地址,指針的特性就是在地址不變的情況下,可以很方便的修改所指向的內容\x0d\x0a\x0d\x0a最重要的應用有兩個,一是函數參數,二是函數指針\x0d\x0a函數參數:函數返回值只有一個,如果想回傳多個參數,則必須使用指針\x0d\x0a函數指針:典型應用就是回調函數(callback)
c語言指針有什麼用
1、指針的使用使得不同區域的代碼可以輕易的共享內存數據;2、C語言中一些複雜的數據結構往往需要使用指針來構建;3、C語言是傳值調用,而有些操作傳值調用是無法完成的,但是這種操作可以由指針來完成,而且並不違背傳值調用。
怎麼理解C語言里的指針?
指針就是內存的地址。
內存懂吧,就是放數據的地方,數據就像一個人的家,懂吧,一棟樓里,肯定住了不止一家人吧,那麼確定每家的地址,就需要幾樓幾零幾這樣設置地址吧。內存也是一樣的,內存是按一個字節的大小來安排地址的。
比如int a;我們申請了一個int型,整形的變量,int是四個字節的數據類型,所以變量a在內存上會有一個地址,地址是按第一個數字為準的。假設內存上沒有任何數據,都是空的,那麼內存就會按順序來放地址,假設內存的第一個地址是0,以此類推,那麼當我們int a變量的時候,內存就會把0-3地址的空間分配給變量a,因為a佔四個單元內存,那麼怎麼確定變量a的地址呢?計算機是按這個內存地址上的最開始那個算的,即變量a的地址是0。
當我們在聲明了int a變量之後,再聲明一個char b變量。如下:
int a;
char b;
這個時候,int a先被聲明了,假設內存是空的,那麼變量a就會被安排0-3的地址。第二個聲明char b;就會接在變量a之後,因為char是一個字節的數據,所以內存只會分配一個4號內存給變量b,變量b的地址就是4。以此類推,其他類型是一樣的。
指針就是用來存放內存地址的地方。指針變量一般也會單獨存放。
比如:
int a; //內存分配編號為0-3的內存空間給變量a;變量a的地址就是最開頭的那個編號即變量a的地址是0;
char b; //內存緊接着分配編號為4的內存空間給變量b,因為char是一個字節的,所以變量b的地址唯一,就是4。
隨後,我們申請指針。
int * p;
char * t;
我們申請了兩個指針, *是指針的標誌,有*的變量是指針,沒有*的是一般變量,*只是用來區別變量是int型數據還是指針。
當變量是指針的時候,意味着這個變量只能存放內存地址,而不能存放任何自然數。
即指針p,只能用p=a; 變量a在C語言中,單用的時候,使用變量a裡面存放的值,而不是他的地址,比如 我們再聲明一個變量 int g; g=a;這個例子里,我們聲明了一個int型變量g,並用g=a來初始化g,g=a的意思是,用a里存放的數,即讀取出a裡面存的數,然後把這個數給g,並不是把a的地址給g。所以C語言里規定了符號為取地址操作符,p=a;的意思就是取出a的地址,給p,這個時候是可以的,因為p是指針,並且p指針指向的類型是int。
在C語言中,給指針賦地址,要檢查變量的類型的,比如int *p;這個指針p,p前面的*表示他是指針,說明他只能存放地址,*號前面的類型說明符,進一步說明,p這個指針只能存int型變量的地址,即如果p=b;是不會成立的,並且會報錯,因為p是一個存放int型變量的指針,而變量b是一個char型變量,在C語言里,指針和對應的變量的類型要一致。不能夠混用。
不能混用的原因在於,到時候解引用的時候會出錯,即如果 p=b,成立的話,那麼到時候使用 a=*p;的時候會出現嚴重錯誤,因為p=b,是把char型變量的地址給int型指針,當我們在使用解引用符號*的時候,就會錯誤,a=*p;的意思是,用p里存放的地址,找到內存上的數據,並且給變量a,編譯器會檢查,得知p是int型變量指針,所以需要按照這個地址取出的數據是四個字節的數據,所以程序會把b的地址4按照int型的數據變量地址來使用,會調取內存上編號為4,5,6,7號位的數據,然而編號為4的內存上放的是char 型變量b的數據,5,6,7號內存上,根本沒有數據,從而出錯。所以C語言嚴格要求,指針的類型和變量類型要一致,即int *的指針只能存放int型變量的地址,不可混用。
最後一個疑問點在於*符號,在C語言里是復用的,即有三種使用方法,這裡給你區別一樣,要不然你會有疑問,* 這個符號,在C語言有三種意思,一種是乘法,即 a=5*3里,這個時候這個符號*是乘法的意思,認出他很簡單,因為乘法必須要有乘數,被乘數,即符號*左右兩邊都要有實數或者變量,即使是c=a*b;的表達也不會錯,a,b是變量的話,符號*是乘號用法。
第二種用法就是我們看到的 int *p;這裡面符號*是指針的標誌,只是用來說明p是一個指針,假設一個int p,那請問怎麼區別p是指針還是變量,所以就是通過添加符號*來區別變量和指針的,而且指針和變量一樣,都需要int,char,double等類型說明,所以只有在聲明變量的時候,才使用。
第三中用法就是和符號的操作相反的操作,符號在C語言里,只有一個用法,就是表明,這個運算符是取出後面的地址,即a,就是取出變量a的地址,即指針,符號左邊沒有任何變量,只有右邊有變量,而符號*則是相反操作,意思是取出符號*右邊的指針里的地址,並取出這個地址里存放的數,所以*P,就是取出指針p里的地址,然後取出這個地址里存放的數。符號*也是右邊有變量,而左邊沒有任何變量的操作,他們都是單操作符。
第二種和第三種用法要怎麼區別,就是第三種一定是a=*p這樣使用的,符號*的左邊一定沒有任何類型說明符,而如果是第二種用法,那麼符號*的左邊一定有類型說明符,即第二種一定是int *p; 即 類型說明符 + * +變量名的形式,而且只用在聲明指針變量的時候。
C語言中指針是什麼
我們都知道:C語言中的數組是指 一類 類型,數組具體區分為 int 類型數組,double類型數組,char數組 等等。同樣指針 這個概念也泛指 一類
數據類型,int指針類型,double指針類型,char指針類型等等。
通常,我們用int類型保存一些整型的數據,如 int num = 97 , 我們也會用char來存儲字符: char ch = ‘a’。
我們也必須知道:任何程序數據載入內存後,在內存都有他們的地址,這就是指針。而為了保存一個數據在內存中的地址,我們就需要指針變量。
因此:指針是程序數據在內存中的地址,而指針變量是用來保存這些地址的變量。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/253485.html