1樓:匿名使用者
要明白指標的概念,首先得明白程式中的變數在記憶體地址空間中如何存放。
記憶體地址空間以位元組為單位,包括程式的**段、資料段、堆還有棧。
一個變數有兩個屬性:變數型別和變數名。通過變數名我們可以找到該變數的第一個位元組在地址空間記憶體放的位置(即記憶體地址);通過變數屬性(即變數型別)我們知道該變數總共佔用幾個位元組,這樣每次訪問它就知道取多少個位元組,例如int型變數一般32位,即佔用4個位元組。
一個變數在定義之後,程式會給它分配記憶體,這個記憶體地址是不會變的,直到這個變數過期。
這樣,除了通過變數名來訪問該變數之外,如果我們知道了該變數在記憶體中存放的位置,那應該就能直接對該變數進行讀寫。如果能這樣做,在某些情況下還是有很大便利性的。c語言如何實現該功能?
指標。用指標來指向變數,(即通過指標來訪問變數),其實就是直接訪問該變數的記憶體地址。為了安全起見,一個指標的型別必須與該指標指向的變數型別相對應,因為在用指標來取代變數名進行各種操作時,編譯器會首先判斷該操作是否合法。指標也必須能包含變數的這兩個屬性,不然怎麼訪問該變數。
指標儲存的值就是它指向的變數在記憶體中的起始位置;指標的型別表明該指標指向的是什麼型別的變數。
例如,int * pi = &a;
pi指向int型變數a,這樣pi的值就是a的起始記憶體地址,pi是int*型指標。
這樣通過解引用操作符*就可以通過*pi來訪問a的值(訪問a的記憶體地址來獲得a的值),在需要使用a的時候,我們可以用*p來取代,例如:
*p = 1 + 2; // a = 1 + 2;
m = *p * 3; m = a * 3;
一般,初學者對c指標的困惑有兩個地方:一個是多重指標,另外一個是強制型別轉換。
多重指標,即指向指標的指標,例如 int ** ppi。指標也是變數,指向指標的指標無非就是它指向的型別是指標,例如,這裡ppi是一個指標,它指向的變數型別是int*型指標。對ppi解一次引用可以訪問該int*指標變數,對該int*變數再解一次飲用可以訪問該指標指向的int型變數,即**ppi。
強制型別轉換,例如,char * pc = (char *)pi;通過*pc訪問的是*pi的第一個位元組。
其實只要記住一點就行了,指標有兩個屬性,它儲存的記憶體地址和它指向的變數型別。通過強制型別轉換,其實轉換的是編譯器對該指標所指向的變數型別的轉換。例如,本來pi指向的是一個4位元組記憶體,通過強制轉換,pc指向的就是一個1位元組記憶體,記憶體起始地址沒變,變的只是每次訪問該記憶體所訪問的位元組數。
例如,有一個常見的例子,如何判斷機器的記憶體模型是大端還是小端?(一個多位元組變數存放在記憶體中時低地址處存放的是高位元組還是低位元組,前者是大端,後者是小端)
int a = 0x01;//宣告一個4位元組int型變數,高位元組是0,低位元組是1
char* pc = &a;//宣告一個指向char的指標,這樣通過pc訪問的記憶體是一個位元組,即通過pc可以訪問到a佔用的第一個位元組(低地址處),通過*pc的值即可判斷是大端還是小端
if (*pc == 1) printf("小端");
else printf("大端");
2樓:匿名使用者
指標這個詞彙實際上是個,形象的比喻——
比喻一個箭頭,指向記憶體中的某個資料塊——
事實上現代計算機系統中確實存在這樣的資料塊,但不存在這樣的任意箭頭!
指標確切的語義是地址。是一個資料型別,跟int是一個資料型別一樣。
是型別,就可以例項化。比如,int的例項是整數,指標的例項是地址。如此而已~
3樓:匿名使用者
指標 就是地址,對應著記憶體中的地址,
就好比北京市是記憶體條,"長安街100號"就是地址,也就是指標,他的內容是一個房子。
int* pointer = 0; 宣告瞭一個指標,就是宣告瞭長安街100號,但是這是他只是純粹意義的一個符號,因為他不指向任何實際的內容
pointer = malloc(1); //pointer指向了記憶體中的一塊記憶體,就好比給長安街100號這個符號給上了意義,現在它就代表在東經***北緯***的一個具體的位置。
*pointer 就是檢視pointer具體指向的內容,就代表東經***北緯***
總的來說,指標就是地址,他指向記憶體中的具體的一個位置
4樓:匿名使用者
比方說一個普通的long型別值:0x00400300,把它看成一個普通數他就是0x00400300,可是把它看成指標那麼就表明你注重的是0x00400300這個地址儲存的值。我們都知道每個資料在程序當中都是要有地址去儲存它的,就好比水要有瓶子來裝 一樣。
這裡,我們把0x00400300當做是瓶子,我們要關注的是瓶子裡的水。所以就有指標這個概念。
5樓:彭珂的課堂
c語言_071_指標的定義和使用_上
c語言指標的概念
6樓:匿名使用者
指標是c語言中廣泛使用的一種資料型別。 運用指標程式設計是c語言最主要的風格之一。利用指標變數可以表示各種資料結構; 能很方便地使用陣列和字串; 並能象組合語言一樣處理記憶體地址,從而編出精練而高效的程式。
指標極大地豐富了c語言的功能。 學習指標是學習c語言中最重要的一環, 能否正確理解和使用指標是我們是否掌握c語言的一個標誌。同時, 指標也是c語言中最為困難的一部分,在學習中除了要正確理解基本概念,還必須要多程式設計,上機除錯。
只要作到這些,指標也是不難掌握的。
指標的基本概念 在計算機中,所有的資料都是存放在儲存器中的。 一般把儲存器中的一個位元組稱為一個記憶體單元, 不同的資料型別所佔用的記憶體單元數不等,如整型量佔2個單元,字元量佔1個單元等, 在第二章中已有詳細的介紹。為了正確地訪問這些記憶體單元, 必須為每個記憶體單元編上號。
根據一個記憶體單元的編號即可準確地找到該記憶體單元。記憶體單元的編號也叫做地址。 既然根據記憶體單元的編號或地址就可以找到所需的記憶體單元,所以通常也把這個地址稱為指標。
記憶體單元的指標和記憶體單元的內容是兩個不同的概念。 可以用一個通俗的例子來說明它們之間的關係。我們到銀行去存取款時, 銀行工作人員將根據我們的帳號去找我們的存款單, 找到之後在存單上寫入存款、取款的金額。
在這裡,帳號就是存單的指標, 存款數是存單的內容。對於一個記憶體單元來說,單元的地址即為指標, 其中存放的資料才是該單元的內容。在c語言中, 允許用一個變數來存放指標,這種變數稱為指標變數。
因此, 一個指標變數的值就是某個記憶體單元的地址或稱為某記憶體單元的指標。圖中,設有字元變數c,其內容為「k」(ascii碼為十進位制數 75),c佔用了011a號單元(地址用十六進數表示)。設有指標變數p,內容為011a, 這種情況我們稱為p指向變數c,或說p是指向變數c的指標。
嚴格地說,一個指標是一個地址, 是一個常量。而一個指標變數卻可以被賦予不同的指標值,是變。 但在常把指標變數簡稱為指標。
為了避免混淆,我們中約定:「指標」是指地址, 是常量,「指標變數」是指取值為地址的變數。 定義指標的目的是為了通過指標去訪問記憶體單元。
既然指標變數的值是一個地址, 那麼這個地址不僅可以是變數的地址, 也可以是其它資料結構的地址。在一個指標變數中存放一
個陣列或一個函式的首地址有何意義呢? 因為陣列或函式都是連續存放的。通過訪問指標變數取得了陣列或函式的首地址, 也就找到了該陣列或函式。
這樣一來, 凡是出現陣列,函式的地方都可以用一個指標變數來表示, 只要該指標變數中賦予陣列或函式的首地址即可。這樣做, 將會使程式的概念十分清楚,程式本身也精練,高效。在c語言中, 一種資料型別或資料結構往往都佔有一組連續的記憶體單元。
用「地址」這個概念並不能很好地描述一種資料型別或資料結構, 而「指標」雖然實際上也是一個地址,但它卻是一個資料結構的首地址, 它是「指向」一個資料結構的,因而概念更為清楚,表示更為明確。 這也是引入「指標」概念的一個重要原因。
7樓:匿名使用者
開闢一個地址空間
空間中的內容記錄的是
另一個地址
對他指向的資料進行操作
和直接對變數操作是一個意思
論述c語言中指標的概念和作用,並舉例說明
8樓:匿名使用者
1、指標概念:變數的地址(計算機記憶體位元組的編號)叫做指標,存放變數地址的變數叫指標變 量, 簡言之,指標是用來存放地址的。
2、作用:指向這個變數或陣列的首地址,是變數的間接引用方式。其值如果改變,變數的值或陣列元素的值也會跟著改變。
程式對變數的操作實際上是對變數所在的儲存空間讀取和寫入資料。方便對變數的操作。
舉例說明:
int a=3;/*定義一個整型變數a,並賦初值3*/int *p;/*定義一個指標變數p*/
p=&a;/*讓p指向a的首地址,也就是a的地址*/程式為a分配一個2個位元組的儲存單元,假如2個位元組的地址分別為(abcd1和abcd2,唯一),那麼p裡面放的值就是abcd1,不是3。這時可通過p直接引用a,實際上*p=3。以後不管a存放在記憶體中的哪個地方,只用通過呼叫p就可以引用a。
這時如果令*p=4,則最後的a值也為4。對於陣列,指標是指向陣列的首地址。
9樓:
自己去看這本書吧,上面有關於指標的上百個例子和詳細的程式註釋。
10樓:穿拖鞋不帥
我覺得如果你真想學指標的話,應該找本書看
11樓:匿名使用者
基本概念不要諮詢。
找本書自己先好好學習基礎, 有疑問不懂得再問吧。
c語言中指標的概念和用法?
12樓:羽孝姬娟
1.記住一些關鍵字
2.熟練使用輸入輸出
3.學好陣列和指標
指標就是記憶體地址,記住這點很有幫助
13樓:養時芳呼詩
指標好比一把bai鑰匙,原du本你開啟一個文zhi件只要有這個
dao檔案的地址就行,但為了專安全屬你可以吧檔案的地址放在保險櫃裡,而保險櫃的鑰匙就是指標。指標怎麼用,當然是先定義指標變數,再將一個儲存區域的地址賦給這個指標變數,如:int
a,*p;p=&a;那麼*p==a了。*是指向的意思
c語言指標基本概念及其指標變數的定義是什麼
14樓:匿名使用者
語言中,指標是一種型別,被稱為「指標型別」。指標型別描述的是一個地址,這個地址指向記憶體中另外一個物件的位置。簡單地說,指標表示的是它所指向物件的地址。
1、比較point,*point,&point三者的區別
對於int * point;
point:是指標變數,其內容是地址量。
*point:是指標變數的目標變數,即指標指向的那個變數,其內容是資料。
&point:是指指標變數本身所佔據的儲存地址。
2、指標與陣列
用指標和陣列名在訪問記憶體中的資料時,他們的表現形式是等價的,因為他們都是地址量。
陣列名錶示整個陣列的首地址,可以看作是固定地址的指標,不能被賦值。
陣列名無須賦初值,而指標在使用前必須賦初值。
3、字元指標和字串
字串是一個字元陣列,字串以『\0』結束。printf函式的%s格式輸出字元時,是從給定的地址開始,到遇上第一個『\0』字元時結束。
對字元指標初始化,是將字串的首地址賦給指標。
4、指標型函式
所謂指標型函式,即返回值是指標(地址)的函式。
5、多級指標
指向指標的指標(**p)就是二級指標,指向指標的指標的指標(***p)是3級指標。
多級指標類似於間接定址。
6、指向函式的指標
c語言中的函式名錶示函式的首地址,即函式執行的人口地址。
定義形式:[儲存型別][資料型別標示符](*指向函式的指標變數名)();
例子: int(*fun)();//指向函式的指標 , int * fun(); //指標型函式,注意(* fun)括號不能少
7、動態指標
當需要一大片記憶體的時候,最好使用動態分配。
使用malloc函式:void * malloc(size_t size)。
例子:int * pn=malloc(10*sizeof(int));
double *pd=malloc(10*sizeof(double));
c語言的函式指標舉個例子,c語言中函式指標是什麼 有什麼用 舉個例項
劉文正粉絲 函式指標告訴cpu下一步需要執行 的 的指標,一陣列十分相像.include void function int i,double d 一個函式的宣告 void anotherfunction int i,double d 另外一個函式宣告 int main mxl033 回答是對的。v...
關於C語言指標問題,C語言指標的賦值問題
飛翔的蠍子大叔 關於int p1 123這個問題我看了很多資料,在這裡我發表一點看法,該問題非常好,這是c語言需要規範的地方。int p1 123 是非法操作,指標表示地址,地址 123?我是沒有見過這種操作。地址一般用二進位制 八進位制 十六進位制表示,123表示地址根本就是扯淡!這個語句的目的就...
關於C語言指標的指標的疑問,關於C語言的指標問題 指標的地址 1問題
month是指標陣列,每個元素都是一個char型指標,指向一個字串的首地址 p是二級指標,p month,p指向month陣列的首地址,也就是 january 的首地址的地址,p的值就是 january 的首地址,用 s 的格式輸出,就是字串 january 然後p month i,month是陣列...