1. 程式人生 > >指針存的是什麽?

指針存的是什麽?

匯編 編譯 匯編代碼 後退 自己 -c 高效 一句話 普通

int a = 3;
int* p = &a;

一句話:變量名即地址!
a所在地址 存儲的是 數字3
p所在的地址 存儲的是 a的地址 也就是p的值為a的地址
*p解地址,p為a的地址 所以*p就是a的值 故*p=3。

指針是一個特殊的變量,它裏面存儲的數值被解釋成為內存裏的一個地址。

指針變量存放的是內存地址,那為什麽指針還要定義類型? - 知乎 https://www.zhihu.com/question/29622405


指針就是一個存放地址的變量 

當指針指向某個變量

這時這個指針裏就存放了那個變量的地址

同時可以利用指針直接取變量中的值用 只要在指針前加 * 就是取其
真值了(也就是被指向的變量的值) 

舉個例子 
int i=0,*p;
聲明了一個 int 類型的 變量i和指針p

假設i在內存中所存在的地址為aaaaa(隨便寫的)

p->i 就是使指針p指向i
也就是說 指針p中存放了aaaaa這個地址

當你操作這個p時就是直接操作了aaaaa這個地址中存放的東西

間接操作了變量i,

這就是指針的作用

C語言中指針變量是存在哪裏的?

比如
我們的全局和靜態變量放在全局區,生命周期是整個程序運行期間
我們的局部變量是放在棧區,模塊執行結束後退棧
我們程序員自己開的內存是放在堆區,用完自己free

那指針算什麽?是放在哪裏的?
比如我
int *a;
a =(int*) malloc(10*sizeof(int));

這個a指向的內存是在堆上
但是a指針本身的4個字節是放在哪裏的?
1、指針變量和普通的變量一樣,編譯期儲存在代碼當中,運行期間儲存在內存裏。c語言的變量值是通過該變量的內存地址尋址得到的,而對於一個已經編譯好的程序,變量的地址都是確定的值,不可以更改。這是因為程序在編譯時編譯器已經通過語法分析把指針變量的地址值計算出來了,所以指針變量實際上不用保存在內存堆棧或數據段中,而是包含在匯編代碼裏面。
2、指針變量裏面就是整型的一個十六進制數,用來表示的就是指向某個變量的地址;
指針是C語言中廣泛使用的一種數據類型;
利用指針變量可以表示各種數據結構;
能很方便地使用數組和字符串;
並能象匯編語言一樣處理內存地址,從而編出精練而高效的程序;
指針極大地豐富了編程語言的功能。

指針存的是什麽?