1樓:匿名使用者
是的實際上函式在記憶體中也要佔據一片儲存單元, 這片儲存單元的起始地址, 我們稱其為函式的入口地址, 即函式的指標, 函式的入口地址是用函式名來表示的。
因此我們可以定義一個指標變數, 讓它的值等於函式的入口地址, 然後可以通過這個指標變數來呼叫函式, 該指標變數稱為指向函式的指標變數 。
這裡還有兩個簡單程式關於指標和陣列的區別
①實參和形參都用指標變數
#include
void inv3(int *x , int n);
void main( )
;p = a ;
inv3( p , 6 );
for( p=a ; pprintf(「%3d」, *p );
printf(「\n」);
void inv3(int *x , int n)②實參用指標變數, 形參用陣列名
#include
void inv4(int x[ ] , int n);
void main( )
;p = a ;
inv4( p , 6 ) ;
for( p=a ; pprintf(「%3d」, *p );
printf(「\n」);
void inv4(int x[ ] , int n)
2樓:雪見香山
省資源不是關鍵,用指標可以在函式內運算元據原儲存單元而不是函式新開闢的記憶體
3樓:匿名使用者
提高執行速度
在函式帶如引數的時候會非常的方便
處理連結串列很方便
就是處理起來麻煩
在函式帶如引數的時候會非常的方便
例如void swap(int *x, int *y)void main() }
swap(&a[max_i], &a[min_i]);
for(i =0 ; i <10; i++) }
4樓:
指標的最大好處是:它非常靈活,功能強大!!它可以指向系統記憶體中的任何一個地址!
這個功能是最棒的!尤其是編寫系統程式的人員特別需要!例如:
定義一個整型指標變數:int * point ; 然後你可以用 p=0x12345,即你可以指向機器的實體地址 0x 12345,然後你可以讀取該地址的值。
至於你說的第二個問題,用陣列比用指標安全、保險,不容易出錯。所以如果能用陣列引用元素的話,就儘量不用指標。
5樓:匿名使用者
1.指標概念:變數的地址(計算機記憶體位元組的編號)叫做指標,存放變數地址的變數叫指標變數, 簡言之,指標是用來存放地址的。
2.指標作用:指向這個變數或陣列的首地址,是變數的間接引用方式。
其值如果改變,變數的值或陣列元素的值也會跟著改變。程式對變數的操作實際上是對變數所在的儲存空間讀取和寫入資料。方便對變數的操作。
3.舉例說明:
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。對於陣列,指標是指向陣列的首地址。
c語言指標的作用有哪些?
6樓:嘩嘩嘩嘩
指標的用途非常廣泛,比如如果你想通過函式改變一個變數的值,就得用指標而不能用值傳遞。還有在很多時候變數,特別是物件的資料量實在太大,程式設計師就會用指標來做形參,只需要傳遞一個地址就行,大大提高了效率。簡單地說指標就是指向變數和物件的地址。
基本說明:
1、在計算機中,所有的資料都是存放在儲存器中的。 一般把儲存器中的一個位元組稱為一個記憶體單元, 不同的資料型別所佔用的記憶體單元數不等,如整型量佔2個單元,字元量佔1個單元等;
2、為了正確地訪問這些記憶體單元,須為每個記憶體單元編上號。 根據一個記憶體單元的編號即可準確地找到該記憶體單元。既然根據記憶體單元的編號或地址就可以找到所需的記憶體單元,所以通常也把這個地址稱為指標。
記憶體單元的指標和記憶體單元的內容是兩個不同的概念。
7樓:張簡元芹是群
指標是c語言中廣泛使用的一種資料型別。
運用指標程式設計是c語言最主要的風格之一。利用指標變數可以表示各種資料結構;
能很方便地使用陣列和字串;
並能象組合語言一樣處理記憶體地址,從而編出精練而高效的程式。指標極大地豐富了c語言的功能。
學習指標是學習c語言中最重要的一環,
能否正確理解和使用指標是我們是否掌握c語言的一個標誌。同時,
指標也是c語言中最為困難的一部分,在學習中除了要正確理解基本概念,還必須要多程式設計,上機除錯。只要作到這些,指標也是不難掌握的。
指標的基本概念
在計算機中,所有的資料都是存放在儲存器中的。
一般把儲存器中的一個位元組稱為一個記憶體單元,
不同的資料型別所佔用的記憶體單元數不等,如整型量佔2個單元,字元量佔1個單元等,
在第二章中已有詳細的介紹。為了正確地訪問這些記憶體單元,
必須為每個記憶體單元編上號。
根據一個記憶體單元的編號即可準確地找到該記憶體單元。記憶體單元的編號也叫做地址。
既然根據記憶體單元的編號或地址就可以找到所需的記憶體單元,所以通常也把這個地址稱為指標。
記憶體單元的指標和記憶體單元的內容是兩個不同的概念。
可以用一個通俗的例子來說明它們之間的關係。我們到銀行去存取款時,
銀行工作人員將根據我們的帳號去找我們的存款單,
找到之後在存單上寫入存款、取款的金額。在這裡,帳號就是存單的指標,
存款數是存單的內容。對於一個記憶體單元來說,單元的地址即為指標,
其中存放的資料才是該單元的內容。在c語言中,
允許用一個變數來存放指標,這種變數稱為指標變數。因此,
一個指標變數的值就是某個記憶體單元的地址或稱為某記憶體單元的指標。圖中,設有字元變數c,其內容為「k」(ascii碼為十進位制數
75),c佔用了011a號單元(地址用十六進數表示)。設有指標變數p,內容為011a,
這種情況我們稱為p指向變數c,或說p是指向變數c的指標。
嚴格地說,一個指標是一個地址,
是一個常量。而一個指標變數卻可以被賦予不同的指標值,是變。
但在常把指標變數簡稱為指標。為了避免混淆,我們中約定:「指標」是指地址,
是常量,「指標變數」是指取值為地址的變數。
定義指標的目的是為了通過指標去訪問記憶體單元。
既然指標變數的值是一個地址,
那麼這個地址不僅可以是變數的地址,
也可以是其它資料結構的地址。在一個指標變數中存放一
個陣列或一個函式的首地址有何意義呢?
因為陣列或函式都是連續存放的。通過訪問指標變數取得了陣列或函式的首地址,
也就找到了該陣列或函式。這樣一來,
凡是出現陣列,函式的地方都可以用一個指標變數來表示,
只要該指標變數中賦予陣列或函式的首地址即可。這樣做,
將會使程式的概念十分清楚,程式本身也精練,高效。在c語言中,
一種資料型別或資料結構往往都佔有一組連續的記憶體單元。
用「地址」這個概念並不能很好地描述一種資料型別或資料結構,
而「指標」雖然實際上也是一個地址,但它卻是一個資料結構的首地址,
它是「指向」一個資料結構的,因而概念更為清楚,表示更為明確。
這也是引入「指標」概念的一個重要原因。
c語言中指標的作用是什麼?
8樓:匿名使用者
指標指向地址,指標的特性就是在地址不變的情況下,可以很方便的修改所指向的內容
最重要的應用有兩個,一是函式引數,二是函式指標函式引數:函式返回值只有一個,如果想回傳多個引數,則必須使用指標函式指標:典型應用就是**函式(callback)
9樓:杜爺1號
簡單地說指標就是指向變數和物件的地址。
指標的用途非常廣泛,比如如果你想通過函式改變一個變數的值,就得用指標而不能用值傳遞。還有在很多時候變數,特別是物件的資料量實在太大,程式設計師就會用指標來做形參,只需要傳遞一個地址就行,大大提高了效率。
以上還只是指標的初步應用,隨著你在c語言學習上的逐步深入,你會發現更多的用途的。
10樓:匿名使用者
用來簡單的標示一個地址引用。
指向變數地址,便於對變數操作。
就像桌面的快捷方式,它指向一個真實的檔案。
就像給儲存器的某個儲存地址單元起了個名字,操作這個名字就等於操作的這個儲存地址單元,比如,要給某個儲存地址單元賦值,這時候就把值賦給,指向這個儲存地址的名字。也就是說,使用指標表示地址單元比直接用記憶體地址號表示方式,更人性化,操作更靈活。
11樓:匿名使用者
指向地址啊。
比如a是指標
*a 就是指a地址所存的數字。
呼叫其中數字。
12樓:匿名使用者
指標是一種存放另一個變數的地址的變數。
比如申請一個整形變數 int a = 128; 再申請一個指標讓這個指標指向變數a.
int *p;
p = &a; //取a在記憶體中的地址,把a的地址賦給p。這樣p就指向了變數a的地址。
13樓:奧·備侖思
指標,首先從概念上是「變數」。
它存放的是記憶體地址,而不是具體資料。
14樓:天涯海角情緣在
怎麼說指標的作用呢?通俗點講就是當你用上指標的時候,你到目標地的就會有捷徑了,移動性強,可操作性很大,對於資料的刪除、插入、編輯都很方便,換成其他的,則比較麻煩。
15樓:匿名使用者
c語言中指標的作用是什麼?啊這個問題還不好一句回答。這是c本身是低階語言,能夠操動記憶體的特效決定的,早期的時候對計算機說這就是效率。
現在好像不是這樣說了,都說指標很危險,特別是在目前複雜作業系統下。
要是說作用是什麼?是求高效的低階語言特有的特質。
16樓:匿名使用者
指標啊,用來取一個元素在記憶體中的地址
c語言中指標有哪些用處。或者可以用來做什麼,請簡單舉例說明
17樓:匿名使用者
指標可以快速訪問陣列中的元素,想訪問下一個,就自加1,上一個就自減1,下一行就自加一行,上一行就自減一行,特別適用快速逐點處理影象,
如:unsigned char img[1024][768],*p; int i,j; p=(unsigned char *)img; for ( i=0;i<1024;i++) for ( j=0;j<768;j++,p++ ) *p+=16;
指標還可以用不同型別來訪問同一組資料:
unsigned char a[4],*p; unsigned int *q; p=a; *p=0x12; p++; *p=0x34; p++; *p=0x56; p++; *p=0x78; q=(unsigned int *)a; printf("%xh",*q);會輸出十六進位制數78563412h
另外指標可以用於給函式傳遞陣列起始地址、結構地址、類地址、結構陣列地址,這些複雜資料組合,函式返回值也是這樣,另外利用指標還能不從陣列起始地址開始傳入陣列。比如:char str; scanf("%s",str); printf("%s\n",str+1);
C語言指標問題,C語言指標問題
include int main void max min sz 0 for i 1 ip i printf max d position d n max,j 1 printf min d position d n min,k 1 return 0 c語言指標問題 10 最好貼上完整程bai序 或標...
C語言的問題,指標陣列,c語言指標陣列
改變不了,字串常量是改不了的,你可以試試char p aaaaa p 1 b 這樣是改不了的 只能定義二維陣列才可以改 char p 3 100 這樣才可以改,不要問為什麼,字串常量就是不能改 直接讓指標指向另一個字串即可 p 0 aaaa 這樣定義指標指向的字串是無法修改的。c語言指標陣列 p是i...
c語言陣列(指標)越界訪問,C語言陣列(指標)越界訪問
與編譯器無關,只與記憶體管理機制有關,是作業系統級別的問題,堆疊的讀取方式只是資料結構上的不同,在機器層面,依然是單純的記憶體讀寫操作 陣列越界訪問的危險性不好評估,但確實是最嚴重的危險之一 結果基本上會100 崩潰,但是崩潰的原因很可能不一樣,就算是同一段越界 跑幾遍,原因也可能是不一樣的 指標越...