指標變數和指標常量有什麼區別,如何辨別

時間 2021-08-30 09:32:05

1樓:紅領巾飄過

指標常量是乙個位址,指標變數是用來儲存指標常量的乙個變數。我們通常說指標是指指標變數。

2樓:匿名使用者

指標變數可以改變指標指向的位置,而指標常量初始化之後就不能改變指向的位置

3樓:匿名使用者

指標常量是指標所指向的位置不能改變。指標變數,可變。至於如何辨別,在於宣告!

4樓:匿名使用者

指標變數就是可以變的,常量就是不可以變的

如果乙個指標被定義為const型,那就是常量了,是不能修改指標的值的

5樓:匿名使用者

int *p1; // 定義乙個指標變數,可以改變指標所指向的記憶體位置,例子:

int i=1;

int* const p2 = &i; // 定義乙個指標常量,const指標必須在定義時初始化。

可以通過*p2改變i的值,但是不能把p2指向其它位置了。如:

int i=1,j=2;

p2 = &j; // error ,不能修改p2的值。

c語言 怎樣區分指標常量和指標變數?

6樓:匿名使用者

指標常量的本來質是一

個常量,並且使用

源指標來修飾它,那bai麼說du明這個常量的值應該是乙個指標,zhi

其格式應為:daoint * const p,

常量指標本質是指標,並且這個指標乃是乙個指向常量的指標。其格式為:int const * p或者 const int* p.

指標常量的值是指標,這個值因為是常量,所以不能被賦值。

在c/c++中,指標常量這樣宣告:

int a;

int *const p = &a; //const放在指標宣告操作符的右側

只要const位於指標宣告操作符右側,就表明宣告的物件是乙個常量,且它的內容是乙個指標,也就是乙個位址,並且在宣告的時候一定要給它賦初始值。一旦賦值,以後這個常量再也不能指向別的位址。

常量指標的使用要注意,指標指向的物件不能通過這個指標來修改,可是仍然可以通過原來的宣告修改,也就是說常量指標可以被賦值為變數的位址,之所以叫做常量指標,是限制了通過這個指標修改變數的值。

所以,指標常量和指標變數的區別就是是否使用了const修飾符修飾,凡是有const修飾的指標都是指標常量,否則就是指標變數。

7樓:

區分什麼是常量,什麼是變數,就是要看它是不是可變的,可變就是變數,不可變就是版常量。

char s1[100]="abc";

陣列的內權容是可變的,所以是變數,但陣列名指向的位址是不可變的,所以是常量

char *s2="def";

字串"def"是常量,因為不可變,而s2的值是可變的,是變數

8樓:秦流風

1、常量du指標

指向常量的zhi指標變數的定義和使用

如:daoconst int *p;

2、指標常內量

如:char* const p = "abcde";

可以容這麼理解:const p的型別式char*,所以p是不可以再修改的。也就是所p必須是在定義時就已經初始化,並且不能再修改了。

3、指向常量的指標常量

指向常量的指標常量

如:const int* const p = &b;

可以這麼理解int* const p的型別時const,那麼也就是所int* const p是不可以修改的。

再看int* const p.const p的型別是int*,也就是p是不可以再修改的,並且它的型別是int*.

常量指標與指標常量的區別

9樓:匿名使用者

常量指標表示來指標的值

源是乙個常量,比如也就是bai說指標du指向的位址是不變的zhi,但是他的內容可dao變。

指標常量是指指標指向的是乙個常量,也就是說指標指向位址的值是不變的。

比如const int *ptr =0;

10樓:匿名使用者

以及常物件和常引用、常指標與指標常量定義上的區別,順便解釋一下!謝謝! 1 常量指標!如表示a是乙個

c語言中「指標」和「指標變數」的區別是什麼??

11樓:大野瘦子

1、概念不同

「指標」是概念,「指標變數」是具體實現,指標也是乙個變數,所以需要進行定義,而對於指標的定義,與一般變數一樣。

2、 存放位址不同

乙個變數的(記憶體)位址稱為該變數的「指標」,通過指標能找到以它為位址的記憶體單元。而指標變數是用來存放另乙個變數的位址的(即指標)。

指標和指標變數的關係

1、指標就是位址,位址就是指標。

2、位址就是記憶體單元的編號。

3、指標變數就是存放記憶體位址的變數。

4、指標和指標變數是兩個不同的概念,但要注意的是,通常我們敘述時會把指標變數簡稱為指標,實際他們含義並不一樣。

注:指標裡存的是100. 指標:位址 - 具體。

指標裡存的是位址,指標:指標變數 -可變。

指標的好處:

1、直接訪問硬體

2、快速傳遞資料(指標表示位址)

3、返回乙個以上的值返回乙個(陣列或者結構體的指標)4、表示複雜的資料結構(結構體)

5、方便處理字串

6、指標有助於理解物件導向

12樓:蓋辜苟

用例子來看一下。

int a=3;

int *p;

p=&a;

現在來看一下。a=3這個式子先解釋一下

等式右邊是常量,左邊是變數。

同理的p=&a,左邊的是指標變數,右邊的是指標

指標的基本概念:為了區別記憶體的不同位置,記憶體被分成位元組,記憶體的全部位元組順序地賦予乙個稱為位址的編號。程式中的變數將在記憶體中佔據一定的記憶體位元組,在這些位元組中儲存的資料資訊稱為變數的內容。

乙個變數占用連續的若干個記憶體位元組時,最前面的乙個位元組的位址就作為該變數的位址。指標就是記憶體位址,是變數的位址,或函式的入口位址。變數的位址在程式執行時,起著非常重要的作用。

當計算機在計算含有變數的表示式時,計算機按變數的位址取出其內容,並按變數的位址將計算結果存入到變數佔據的記憶體中。

如**:  int x=l;  x=x+2;  其中語句「x=x+2;」中的第乙個x涉及到變數x佔據的記憶體,第二個 x是引用變數 x的內容。該語句的意義是「取x的內容,完成加上2的計算,並將計算結果存入變數x佔據的記憶體中。

」指標變數和它所指向的變數:在c語言中,位址也作為一種值,能被儲存、比較、賦值,並稱位址資料為指標型別,而稱儲存位址值的變數為指標變數,簡稱指標。c程式可用運算子&取變數的位址,如表示式&x的值就是變數x的位址。

程式除能按名引用變數外,也可利用變數的位址引用變數。按變數名引用變數稱為直接引用,而將變數a的位址存於另一變數b中,借助於變數b引用變數a稱為對a的間接引用。

定義指標變數的一般形式為:  型別 * 指標變數名;  或  型別 * 指標變數名=初值表示式;  其中,指標變數名是識別符號,指標變數名之前的符號「*」,表示該變數是指標型別的。而最前面的「型別」,表示該指標變數能指向變數或函式的型別。

初值表示式是乙個位址表示式,如表示式中有某變數的位址表示式,則這個變數應是前面已定義的。

在c語言中,當定義區域性指標變數時,如未給它指定初值,則其值是不確定的。程式在使用它們時,應首先給它們賦值。誤用其值不確定的指標變數間接引用其它變數,會引起意想不到的錯誤。

為明確表示指標變數不指向任何變數,在c語言中用0值表示這種情況,記為null。

如  ip= null;  也稱指標值為0的指標變數為空指標。對於靜態的指標變數,如在定義時未給它指定初值,系統自動給它指定初值0。

指標變數取程式物件的(開始)位址值,不能將乙個整型量或任何其它非位址值賦給乙個指標變數。另外,指標變數對所指向的物件也有型別限制,不能將乙個不能指向的物件的位址賦給指標變數。

如有以下定義:  int i=100,j,*ip,*intpt;  float f,*fp;  以下**如注釋所敘。  ip=&i;/*使ip指向i*/  intpt=ip;/*使intpt指向ip所指變數*/  fp= &f;/*使fp指向正*/  ip=null;/*使 ip不再指向任何變數*/

在電腦科學中,指標(pointer)是程式語言中的乙個物件,利用位址,它的值直接指向(points to)存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為"指標"。

意思是通過它能找到以它為位址的記憶體單元。 在高階語言中,指標有效地取代了在低階語言,如組合語言與機器碼,直接使用通用暫存器的地方,但它可能只適用於合法位址之中。指標參考了儲存器中某個位址,通過被稱為反參考指標的動作,可以取出在那個位址中儲存的值。

作個比喻,假設將電腦儲存器當成一本書,一張內容記錄了某個頁碼加上行號的便利貼,可以被當成是乙個指向特定頁面的指標;根據便利貼上面的頁碼與行號,翻到那個頁面,把那個頁面的那一行文字讀出來,就相當於是對這個指標進行反參考的動作。

指標是程式語言的乙個重要概念。指標在c程式中有以下多方面的作用:

利用指標能間接引用它所指的物件。

利用各種型別的指標形式引數,能使函式增加描述能力。

指標與陣列結合,使引用陣列元素的形式更加多樣、訪問陣列元素的手段更加靈活。

指標能用來描述資料和資料之間的關係,以便構造複雜的資料結構。當乙個資料a要關聯另乙個資料b時,在資料a中增加乙個指向資料b的指標就可實現資料a關聯資料b。結合系統提供的動態分配儲存設施,又能構造出各種動態資料結構。

13樓:

比較嚴格的說法是這樣的:

系統為每乙個記憶體單元分配乙個位址值,c/c++把這個位址值稱為「指標」。如有int i=5;,存放變數i的記憶體單元的編號(位址)&i被稱為指標。

「指標變數」則是存放前述「位址值」的變數,也可以表述為,「指標變數」是存放變數所佔記憶體空間「首位址」的變數(因為乙個變數通常要占用連續的多個位元組空間)。比如在int i=5;後有一句int *p=&i;,就把i的指標&i賦給了int *型指標變數p,也就是說p中存入著&i。所以說指標變數是存放指標的變數。

有乙個事實值得注意,那就是有不少資料和教科書並沒有如上區分,而是認為「指標是指標變數的簡稱」,如對int *p=&i;的解釋是:宣告乙個int *型指標p,並用變數i的位址初始化;而嚴格說應該是宣告乙個int *型指標變數p才對。所以有時看書要根據上下文理解實質,而不能過於拘泥於文字表述。

cint型指標和char型指標有什麼區別

風若遠去何人留 本質上來說是一樣的,不管是什麼指標,其本質就是一個地址。但是在使用上還是有所不同的。1 預設指向空間佔用的大小不同。int 指向空間需要有4個位元組,char 指向空間有一個位元組就可以了。如果int 指向的空間不足,那麼對其讀寫時就會出現越界操作。2 使用時的可取值範圍不同。用 取...

定義指標變數時候2種寫法有什麼區別intp和intp

這兩種寫法的功能沒有區別。這個程式出錯是因為你沒有為p分配空間,所以5就無處可放,所以出錯 include include int main 附 loveqzl 的說法是不正確的,這兩種寫法的作用是一樣的,只不過第一種用法會使程式設計師產生一種錯覺,錯誤地認為int 是一種資料型別,這種認識就會使其...

指標和陣列有什麼區別,指標與陣列的區別和聯絡

1全部這是說陣列的特性,如你舉例的陣列pass 64 裡面的pass單獨拿出來,他就是乙個指標,他所指向的位址是你這個陣列的首位址。而如果你單獨申請乙個指標,這個指標是空的,什麼地方都沒有指,所以就需要去申請乙個記憶體空間給他,c方法是pass char malloc sizeof char 64 ...