當前位置:首頁 » 編程語言 » 指針c語言什麼時候表示地址
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

指針c語言什麼時候表示地址

發布時間: 2023-06-28 02:30:30

c語言裡面的地址是什麼意思,指針指向一個變數的地址

C語言裡面的地址實際上就是一個內存單元的編號,計算機一般是以一個位元組為最小的存儲單元的,每個位元組就給它編一個編號,這個編號就是這個位元組的地址,這個編號也就是地址是具有唯一性的。指針指向一個變數的地址,這個類似於,通過知道房間號就可以確定這個房間的具體位置是一樣的道理,這個房間編號就是房間的地址。

❷ c語言指針是什麼意思!

指針其實是一個整形變數,與其它數據不同的是,它的作用是用來存儲其它變數的地址。指針(Pointer)是編程語言中的一個對象,利用地址,它的值直接指向(points to)存在電腦存儲器中另一個地方的值。由於通過地址能找到所需的變數單元,可以說,地址指向該變數單元。

因此,將地址形象化的稱為「指針」。意思是通過它能找到以它為地址的內存單元。

再打個比方:有個人讓你去麥當勞幫我買個雪糕,那麼麥當勞是這個變數a,但是那個人現在把麥當勞所在的地址寫在紙上給你,那麼這張紙就可以看做一個指向麥當勞的指針。

(2)指針c語言什麼時候表示地址擴展閱讀

舉例說明:

int p; //這是一個普通的整型變數。

int *p; //首先從P 處開始,先與*結合,所以說明P 是一個指針,然後再與int 結合,說明指針所指向的內容的類型為int 型.所以P是一個返回整型數據的指針。

int p[3]; //首先從P 處開始,先與[]結合,說明P 是一個數組,然後與int 結合,說明數組里的元素是整型的,所以P 是一個由整型數據組成的數組 。

int *p[3]; //首先從P 處開始,先與[]結合,因為其優先順序比*高,所以P 是一個數組,然後再與*結合,說明數組里的元素是指針類型,然後再與int 結合,說明指針所指向的內容的類型是整型的,所以P 是一個由返回整型數據的指針所組成的數組。

int (*p)[3]; //首先從P 處開始,先與*結合,說明P 是一個指針然後再與[]結合(與"()"這步可以忽略,只是為了改變優先順序),說明指針所指向的內容是一個數組,然後再與int 結合,說明數組里的元素是整型的.所以P 是一個指向由整型數據組成的數組的指針。

int **p; //首先從P 開始,先與*結合,說是P 是一個指針,然後再與*結合,說明指針所指向的元素是指針,然後再與int 結合,說明該指針所指向的元素是整型數據。由於二級指針以及更高級的指針極少用在復雜的類型中,所以後面更復雜的類型就不考慮多級指針了,最多隻考慮一級指針。

int p(int); //從P 處起,先與()結合,說明P 是一個函數,然後進入()里分析,說明該函數有一個整型變數的參數,然後再與外面的int 結合,說明函數的返回值是一個整型數據。

Int (*p)(int); //從P 處開始,先與指針結合,說明P 是一個指針,然後與()結合,說明指針指向的是一個函數,然後再與()里的int 結合,說明函數有一個int 型的參數,再與最外層的int 結合,說明函數的返回類型是整型。

所以P 是一個指向有一個整型參數且返回類型為整型的函數的指針。

int *(*p(int))[3]; //可以先跳過,不看這個類型,過於復雜從P 開始,先與()結合,說明P 是一個函數,然後進入()裡面,與int 結合,說明函數有一個整型變數參數,然後再與外面的*結合,說明函數返回的是一個指針。

然後到最外面一層,先與[]結合,說明返回的指針指向的是一個數組。然後再與*結合,說明數組里的元素是指針,然後再與int 結合,說明指針指向的內容是整型數據.所以P 是一個參數為一個整數據且返回一個指向由整型指針變數組成的數組的指針變數的函數.

❸ c語言指針怎麼理解,什麼時候會用到指針,要注意哪些方面

cpu自己有運算器和寄存器,通過匯流排與存儲器件相連,在執行運算時,
需要將數據沖存儲器件上面將參與運算的數據讀入,運算完成後再送出到
存儲區。那麼cpu讀入時需要訪問存儲器件的某個單元,需要指定這個單元
的編號,我們管這個編號叫存儲地址。
比如:int a[10],*p; p=&a[3];a就是一個擁有10個整型數據的數據區
的首地址,變數p是存放地址的,稱為指針型變數,賦值時需要取相應存儲
區的地址,p=&a[3];就是取數組a的第4個單元的地址給p,那麼p就拿到了
這個單元的地址,*p=5;就相當於a[3]=5;的操作,p++;後p指針就指向a[4]。
在操作大塊數據時,一般記錄首地址(數組指針),然後根據首地址再加
上偏移量來訪問整個數據,在你程序中寫a[3]時,計算機就會取a數組對應
的首地址再加3個整型偏移量來訪問相應數據。用指針p訪問a數組的好處
是,不用每次計算a加多少偏移訪問數據,而是使p指向某數據後可以p++
或p--來訪問前一個或後一個數據。
注意:
1.指針存放地址用,不是存儲實際數據的,它是用來找數的,在
程序中要注意這點,往往出問題的是,指針還沒有賦值就用來操作,或
用指針來存放數據,如:int *p=15,s[10]={ 0,15,{0} };的
p指針賦值有問題,這樣計算機會把15當成地址存放到p變數中,以後用
*p訪問得到的數據就不是你想要的數據了。(應該類似:p=s+1; *p=15;)
2.指針訪問數據區一般需要程序來控制不要越界,比如定義了10個單元
的數據區,你不能讓指針超出這10個單元的范圍,否則得到的數據就是
不靠譜的。
3.指針的定義只是開設了可以訪問數據區或數組的變數,數據區和數組
需要你的程序另行開設,然後把數據區或數組的某個單元的地址賦值給
指針變數,不要認定義了能訪問數組的指針,數組就定義好了。
4.指針存放的地址最好不要用來與其他地址比較,除非你能確認地址比
較的結果肯定是你想要的。
5.舉例來說,int a[10],*p=a;中a和p都是指針(地址),但a和p是不同的
在編譯器眼中,a是一個數據區的首地址,是一個標記,你程序中使用a
時,編譯器會知道用數據區的首地址來替換操作,而p是你自己程序開
設的變數,可以在程序中操作比如p++; p=a;等,但作為記號的a就不能
在程序中操作了,如a++; a=p;就是錯的了。
6.子程序如果參數是指針型的,這個參數由子程序開設的指針型臨時
變數存儲,這個臨時變數可以進行操作,但不會返回給調用者的指針型
變數。
如:int a[10],*p; int f(int *s) { s++; } main() { p=a; f(p); }
s再怎麼加減都不會影響p。

❹ c語言中 指針的用法以及與地址的區別

果是在定義變數時候加在前面。
簡單的理解,是在定義變數的時候使用呢,還是在訪問變數的時候使用,就是你看它是在哪裡使用,這里把指針指向的值取出來賦給b,意思是這個變數是指針變數,如
char
*a;
如果是在訪問變數的時候加在前面,意思是取這個地址中指向的值,如
char
b=*a;
上面定義了a是一個字元指針

❺ C語言中,指針指向的地址.那個地址是什麼地址

那個地址 是被指向的變畢耐量的地址。
當指針剛聲明完畢時,它並無指向的地址,只有當指針與 某有存儲地址的變數發生聯系時,才有指向地址。
例如:
int *p; // 這時 p 沒有指向地址
int a=3,b=14;
p = &a; 這時 p 指向了 變數 a 的地址了.
// 數值 *p 等於 a 里存放的數值。 printf("%d", *p); 得升棚 3。
這手笑春時,若 a = a+1; 輸出 printf("%d", *p); 得 4。
p = &b; p 指向了 變數 b的地址 了,輸出 printf("%d", *p); 得 14 啦。

❻ c語言二級指針中二級指針p,*p是地址還是值,為什麼有的時候就是值而不是地址

對於一級指針而言,*p是取值,對於二級指針而言,*p是取地址,但是地址又是無符整形數據,所以在二級指針中你把*p當值來用的話,編譯不報錯,但是不合規定。