C語言中的指標到底有什麼用,C語言中指標的作用是什麼?

2021-03-27 10:52:16 字數 6037 閱讀 1554

1樓:匿名使用者

所有變數值儲存在記憶體中,而每個記憶體都有乙個位址,所謂位址就是乙個整數編號,如同門牌號碼用於定位(專業術語叫定址),乙個位址對應乙個位元組(8bit)的記憶體單元。

如今的編譯器,乙個整數int型別的值占用32位bit,也就是4位元組,編譯器將第乙個位元組的編號定義為該整數的位址,由於儲存位址的變數就像乙個箭頭指向某位址,而稱為指標變數。

int a =10; //定義乙個整數變數a,對其賦值10

int *p =&a;//定義乙個指標變數p,對其賦值a的記憶體位址,&符號意思為引用跟隨其後的變數位址。

cont <定址->取值

由於指標是乙個變數的首個位元組的位址,所以要告訴編譯器被指位址包含連續多少個位元組,因此指標也有型別。比如上面例子中宣告了p指標是個整數指標,這樣編譯器知道p指向乙個4位元組的記憶體塊。

你可以將指標變數看做一般的整數變數來理解,用來儲存乙個整數(位址是個整數),只是,該整數代表著某位址,在這裡是a的位址。

在c/c++中很靈活,但是也很危險,也很難學,如果指標指向錯誤的位址會引起程式崩潰,因此在c#中已經被微軟封裝了,但內部還是有指標的。

如果有必要,c#中也可以使用指標,使用非安全**,在專案生成選項卡中勾選「允許非安全**」,然後就可以使用指標了,不過不建議這麼做。

unsafe

2樓:匿名使用者

指標起的作用是標識一塊記憶體。電腦記憶體上的每乙個位元組都具有乙個編號,稱為位址(可以簡單理解為指標),任何讀寫記憶體的指令都必須攜帶位址資訊,否則電腦不知道讀寫那塊記憶體。不管你的程式是用什麼語言寫的,要執行資料和**必須駐留記憶體,cpu要執行指令必須有乙個「指標」(程式計數器)指向記憶體的**塊,如果某個指令要操作記憶體資料,該指令必須攜帶額外的位址資訊。

c語言的指標讓程式設計師具備直接操作和管理記憶體的能力,這個能力也是c語言適合編寫底層軟體的原因之一。現在拿得出手的作業系統都是用c語言(有時也用c++)和組合語言編寫的。在底層軟體領域c語言是佔統治地位的。

c語言對記憶體的操作都是通過指標來實現的,雖然c語言可以通過變數名訪問記憶體,但是編譯過後變數名被轉換為位址。

其他語言雖然沒有指標或者位址概念,但是訪問記憶體是需要位址的,所以與位址相關的底層操作由該語言的執行時庫承擔了,對程式設計師來說,位址就「不存在了」。

3樓:匿名使用者

c#也有指標,只是它是物件導向的,有著大量的封裝,在c#裡指標(*)變成了引用(ref)、(a->b)變成了(a.b)。指標就是位址,把乙個記憶體單元畫成正方體(畫在紙上能可見3個面),上面分別標註:

變數名、位址、值。這就形象多了。

4樓:陽光上的橋

指標其實就是記憶體位址,如果有彙編基礎就容易理解,典型[***x]表示,初學者可以先不求甚解,以後用多了就會明白的。

5樓:匿名使用者

能理解為邏輯上順序排列的門牌號?

6樓:看來還真有

c#可以做的,c語言全部都能做。但是c語言能做的,c#未必做的了。

但是c語言做有些東西會很繁瑣,比如圖形介面之類的。

指標指向記憶體位址,意味著c語言可以直接操作計算機的硬體,只要有位址,這也就是c語言適合底層開發的原因。

7樓:匿名使用者

要注意區分變數的指標和指標變數兩個概念。。。

8樓:**的迷茫

指標是乙個32位資料,代表乙個記憶體位址,這塊記憶體可以放任何東西。就是說指標可以操作任何東西,所以指標很靈活、很強大,但也引入了複雜性。只要理解了指標的原理,再複雜也可以一點一點的分析清楚。

c#的引用跟指標有相似之處,並且可以在unsafe塊裡直接使用指標運算元據。

9樓:匿名使用者

c要是沒指標,那它早淘汰了

10樓:匿名使用者

指標是不是取位址用的啊

11樓:韶正季夏山

指標實際上就是乙個記憶體位址,比如乙個函式指標,就是乙個函式的入口位址,通過這個位址,系統就可以找到這個函式的位置並呼叫它。

c語言中指標的作用是什麼?

12樓:杜爺1號

簡單地說指標就是指向變數和物件的位址。

指標的用途非常廣泛,比如如果你想通過函式改變乙個變數的值,就得用指標而不能用值傳遞。還有在很多時候變數,特別是物件的資料量實在太大,程式設計師就會用指標來做形參,只需要傳遞乙個位址就行,大大提高了效率。

以上還只是指標的初步應用,隨著你在c語言學習上的逐步深入,你會發現更多的用途的。

13樓:匿名使用者

用來簡單的標示乙個位址引用。

指向變數位址,便於對變數操作。

就像桌面的快捷方式,它指向乙個真實的檔案。

就像給儲存器的某個儲存位址單元起了個名字,操作這個名字就等於操作的這個儲存位址單元,比如,要給某個儲存位址單元賦值,這時候就把值賦給,指向這個儲存位址的名字。也就是說,使用指標表示位址單元比直接用記憶體位址號表示方式,更人性化,操作更靈活。

14樓:匿名使用者

指向位址啊。

比如a是指標

*a 就是指a位址所存的數字。

呼叫其中數字。

15樓:匿名使用者

指標是一種存放另乙個變數的位址的變數。

比如申請乙個整形變數 int a = 128; 再申請乙個指標讓這個指標指向變數a.

int *p;

p = &a; //取a在記憶體中的位址,把a的位址賦給p。這樣p就指向了變數a的位址。

16樓:奧·備侖思

指標,首先從概念上是「變數」。

它存放的是記憶體位址,而不是具體資料。

17樓:天涯海角情緣在

怎麼說指標的作用呢?通俗點講就是當你用上指標的時候,你到目標地的就會有捷徑了,移動性強,可操作性很大,對於資料的刪除、插入、編輯都很方便,換成其他的,則比較麻煩。

18樓:匿名使用者

c語言中指標的作用是什麼?啊這個問題還不好一句回答。這是c本身是低階語言,能夠操動記憶體的特效決定的,早期的時候對計算機說這就是效率。

現在好像不是這樣說了,都說指標很危險,特別是在目前複雜作業系統下。

要是說作用是什麼?是求高效的低階語言特有的特質。

19樓:匿名使用者

指標啊,用來取乙個元素在記憶體中的位址

在c語言中什麼是指標?指標是幹什麼用的?,有什麼意義?

20樓:仙

寫簡單的程式的話不用指標也行了吧. 比如這裡a是乙個位址(編譯後), 為了讀寫這個位址單元裡的東西,可以用p,也可以用一般變數a.

對於指標的便利,我現在能想到的,可能是:

函式a呼叫函式b時,把乙個記憶體塊的位址傳遞過去,這樣可以避免按值傳遞時開闢乙個棧空間並逐一拷貝記憶體塊裡的值的開銷(c++裡的拷貝建構函式在做這件事),並且a,b函式操作的都是同乙個記憶體塊裡的東西,如果這就是目的,那麼傳指標就是很有效率的做法(如果不用指標就可能要用乙個全域性的變數了). 用乙個指標(函式指標)存放一系列同型別的函式名(入口位址),方便函式呼叫. void*型別指標可以存放任何型別指標.

讓父類型別指標指向任何子類物件可以實現動態繫結. 寫著寫著似乎指標還挺有用,呵呵.

c語言中,指標中的*是什麼意思?

21樓:

在宣告int *pirand中

*表示這個變數是int型別的指標

在宣告之外

*可以理解成乙個運算子 或者乙個函式

*和&是一對逆運算

&的意思是讀乙個變數的位址

比如你宣告了int a;&a是a的位址可能是xx1001之類的可以在除錯裡看一下

*的意思是讀乙個位址指向的內容

&*pirand==pirand

rand是乙個位址

*rand是指向這個位址的位址

所以程式出錯了

pirand[i]=rand(); 的意思是把rand的位址賦值給pirand[i]

22樓:福建省寧德市

指標是c語言中廣泛使用的一種資料型別,指標的*主要出現在兩個地方

首先是在指標定義時出現的*,定義時的 * 相當於標識了指標變數,即表明這是乙個指標變數

其次,指標在使用時也會出現 *,這裡的*的取內容的意思,即把指標內儲存的東西提取出來使用

23樓:匿名使用者

*有多重意義:

1.在宣告變數時,它表示這是乙個指標

2.還表示乘號

3.在scanf()中表示賦值約束。

4.在printf()中用於動態確定列寬和精度5.用於間接訪問指標所指向的物件的值。

而在pirand[i]=*rand();中,不符合以上任何一條。

24樓:匿名使用者

位址有規律地增長,

int是4個位元組的位置

所以可以當陣列使用,

每次位址增4表示下乙個數

*是該位址 取數值

如p是指向 數i

那麼*p就是取p指向的數的值

pirand[i]=*rand();

pirand[i]表示陣列中的乙個數字

所以pirand[i]=rand();

加個*是錯的

c語言中指標變數與普通變數的區別是什麼?

25樓:與子如初見

int a;

int *p = &a;

指標p是乙個變數,裡面存的是乙個位址,這個位址是a的位址。通過取值運算子*就可以用p訪問a。指標變數使用起來靈活,乙個指標變數只佔四個位元組,但是它可以訪問類似結構體,鍊錶,陣列等多資料集合,而且在訪問這些變數的時候是對記憶體直接訪問,執行效率更高,知識需要慢慢積累,用得多了你就知道指標的好處了。

讓指標指向下乙個很簡單:

比如說int a[10] = ;

int *p = a; //那麼現在p指向的就是陣列a的第0個元素,*p的值就是1

p++;//執行完這句p就指向了陣列a的下乙個元素 ,也就是陣列a的第乙個元素,*p的值就是2.

26樓:殳德候寄雲

1、指標變數是變數的一種,指標變數的值是位址(也是整數),普通變數的值是整數、實數或者其他型別。指標變數的主要作用是修改其他函式的區域性變數和訪問陣列。指標變數需要額外的空間存放位址,由於指標變數是間接訪問所指物件,所以比起直接用普通變數名字訪問所指物件而言,速度稍慢。

2、例如:int

a=5;

int*p

=&a;

指標p是乙個整型指標變數,裡面存的是乙個位址,這個位址是a的位址。通過取值運算子*就可以用p訪問a。指標變數使用起來非常靈活,乙個指標變數只佔四個位元組,但是它可以訪問結構體,鍊錶,陣列等多資料集合,而且在訪問這些變數的時候是對記憶體直接訪問,執行效率高。

c語言中指標加不加*有什麼區別

27樓:丶自由丨落體

剛開始學習

baic,同樣有這du個疑問,在網上zhi查了一下,沒

有什麼讓人一目了dao然的解釋。

專用int *x作為屬

例子。既然int *x 只是定義了乙個記憶體空間,儲存乙個記憶體位址,那麼普通的int x應該也可以做到。

int num = 5;

int *x = #

int x1 = #

x 和 x1 同樣儲存的是 num 的記憶體位址,但是只有用了*宣告的指標能夠通過 *x 來訪問 num .

printf("%p , %p", x ,x1)  // 這一行會輸出兩個一樣的記憶體位址。

printf("%d" , *x )  // 成立,不報錯,正常輸出 5。

printf("%d" , *x1 )  // 不成立,編譯器會報錯,『*』的運算元必須是指標。

第二個變數名使用x1的原因是,當你嘗試 printf 輸出的時候,指標 *x 會強行覆蓋普通的 x 。

C語言中刪除指標用啥,C語言中指標的作用是什麼?

include 包含的標頭檔案 char p char malloc 1024 在c中使用malloc分配 free p 用來釋放記憶體空間 另外分配記憶體還專可以 屬這樣寫 char p malloc sizeof p 一般用copydelete如下 舉個簡單的例子bai int pint new...

關於c語言中的指標問題,關於c語言中的指標問題。

char p heir 這句話包含了2層意思,一是定義乙個指標變數p,即 char p 二是為指標變數p賦初值,即 p heir 實際是將存放字串 heir 的記憶體位址賦給p 因此這句話實際上等價於 char p p heir char p heir 這個表示定義字元指標變數p,並將存放字串 he...

C語言指標的意義在C語言中什麼是指標?指標是幹什麼用的?,有什麼意義?

如果使用變數傳遞,因為自定義函式沒有返回值,所以len的值不會改變。而使用指標,則自定義函式直接操作len,即使沒有返回值,len的值已經改變。如果使用變數傳遞也可以實現,就是需要返回len的值。指標就是指變數的位址 mul arr,i,len 你這個函式的實參取的len的位址,所以你定義函式時的形...