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

c語言的指針有什麼用

發布時間: 2022-01-13 06:49:10

c語言中的指針到底有什麼用

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

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

int a =10; //定義一個整數變數a,對其賦值10
int *p =&a;//定義一個指針變數p,對其賦值a的內存地址,&符號意思為引用跟隨其後的變數地址。

cont <<a<<end; //輸出 a的值:10
cont << p << end ;// 輸出p的值:XXXXX 其實為a的地址,該地址由編譯器和運行時確定。
cont << *p <<end; //輸出p指向的地址中的值:10,也就是a的值,*星號放在變數前面意思就是取該變數中的地址所指內存中的值。
讀取過程為:p的值(a的地址)->定址->取值

由於指針是一個變數的首個位元組的地址,所以要告訴編譯器被指地址包含連續多少個位元組,因此指針也有類型。比如上面例子中聲明了p指針是個整數指針,這樣編譯器知道p指向一個4位元組的內存塊。

你可以將指針變數看做一般的整數變數來理解,用來保存一個整數(地址是個整數),只是,該整數代表著某地址,在這里是a的地址。

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

如果有必要,C#中也可以使用指針,使用非安全代碼,在項目生成選項卡中勾選「允許非安全代碼」,然後就可以使用指針了,不過不建議這么做。
unsafe
{
int a = 10;
int* p=&a;
}

㈡ 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語言中什麼是指針指針是干什麼用的,有什麼意義

寫簡單的程序的話不用指針也行了吧. 比如, int a = 2; int* p = &a; *p = 3; 這里a是一個地址(編譯後), 為了讀寫這個地址單元里的東西,可以用p,也可以用一般變數a. 對於指針的便利,我現在能想到的,可能是: 函數A調用函數B時,把一個內存塊的地址傳遞過去,這樣可以避免按值傳遞時開辟一個棧空間並逐一拷貝內存塊里的值的開銷(C++里的拷貝構造函數在做這件事),並且A,B函數操作的都是同一個內存塊里的東西,如果這就是目的,那麼傳指針就是很有效率的做法(如果不用指針就可能要用一個全局的變數了). 用一個指針(函數指針)存放一系列同類型的函數名(入口地址),方便函數調用. void*類型指針可以存放任何類型指針. 讓父類類型指針指向任何子類對象可以實現動態綁定. 寫著寫著似乎指針還挺有用,呵呵. 我相信指針的使用一定要很小心,否則可能要忍受程序報錯而總找不到錯在何處的痛苦. 有一些比較極端的例子, 如一個函數返回了一個函數里局部變數的指針,一用就出錯; 如聲明一個指針沒有分配空間就傳給別一函數使用; 如多個線程都在使用同一個內存塊,你修我改,甚至有人把它刪掉了或不小心讓指針指向系統用的內存,另一個人還准備往裡讀寫東西---可能要費心思來同步. 如指針指向的內存可能是new/malloc出來的,可能要想辦法及時刪除並要保證沒有別的線程要用...

㈣ C語言的指針有什麼實際作用_

指針實際上就是一個內存地址,比如一個函數指針,就是一個函數的入口地址,通過這個地址,系統就可以找到這個函數的位置並調用它。簡單地說指針就是指向變數和對象的地址。指針的用途非常廣泛,比如如果你想通過函數改變一個變數的值,就得用指針而不能用值傳遞。還有在很多時候變數,特別是對象的數據量實在太大,程序員就會用指針來做形參,只需要傳遞一個地址就行,大大提高了效率。以上還只是指針的初步應用,隨著你在C++學習上的逐步深入,你會發現更多的用途的。

㈤ C語言指針到底有什麼用

指針,說白了就是儲存數據內存段的地址。打個比方說,你家的門牌號是306,那麼你家中回來一些客人,這些客人就相當是一些變數,而門牌號就說明了地址,如果張三在你家,另一個人要找到他,那麼此時我們只需要告訴那人306,就相當於你訪問一個變數時,曲線救國,不直接訪問變數的值,而去訪問變數的地址,這會帶來很多方便。由於c語言是一種比較低級的語言,所以包括了許多對硬體操作的部分,直接對內存進行操作會帶來很多方便。

㈥ 關於c語言中指針的作用

假設叫你去酒店取點東西,那你需要知道些什麼線索才能取到東西呢。
1、酒店名稱
2、房間號
cu8memory_x相當於一個酒店名稱,&cu8memory_x[1]相當於一個房間號。
你知道了酒店名稱和房間號,一般就能拿到東西了,當然得有許可權進入酒店才行。

㈦ c語言的指針到底有什麼用

你直接可以操作內存地址,多牛啊
你不用指針的話,基本上只能給你什麼變數你用什麼變數

㈧ c語言中用指針的好處有哪些

指針非常的好,它把相同的事物歸類,然後把事物做出標記,避免給相同的特點做變數。比如說你和你同學,你們兩個人都有心臟、肝、肺等器官,如果命名心臟1、心臟2這樣比較麻煩,這時如果用上指針,指向你說心臟時說的是你的心臟,指向你同學時說的是你同學的心臟,如果人非常的多,你不用指針,那麼命名心臟1、2、3、4、5.。。。那是非常的多的不必要的變數。我現在運用PLC和WINCC連接時有的時候就用指針。節省了通訊時間,省略了很多的變數。

㈨ C語言中的指針有啥用

指針就是個保存地址的東西。。。他對應的值就是內存地址,CPU操作內存是通過,地址將數據從內存轉入CPU的,寫出也是同理。。。 指針就是個保存該地址值得變數。。。。 簡單的比方,發快遞, 你希望發到中國銀行,對於快遞員來說如果你不給地址,他是沒辦法做到的,他需要有個單子上面寫發送地址在哪。。。這張單子就可以認為存的是地址,指針就是這個用途。。。。當然指針是有數據類型的(這是指針的令一特性),一時也沒辦法給你說清楚。。。你只要知道指針存的是地址就行了。。。。