1樓:
指標是c語言中的乙個重要概念,也是c語言的乙個重要特色。正確而靈活的運用它,可以有效地表示複雜的資料結構;能動態分配記憶體;方便地使用字串;有效而方便地使用陣列;在呼叫函式時能獲得乙個以上的結果;能直接處理記憶體單元位址等……——《c程式設計(第三版)》
你在舉例的時候說的直接引用資料的時候是幾乎沒有區別的,陣列其實也相當於一種指標的應用,只不過是規定好了的。但比如用在排序上,同樣是排序(從大到小)資料1和2,不用指標:
#include
void main()
}排序完成後,p1指向較大的數2,p2指向較小的數1,而a仍然等於1,b=2,它們的值是不變的。如果在另外的程式中同樣呼叫了這兩個變數,用指標就不會對其產生影響,這就是指標作用的乙個方面。指標還有很多其它方面的作用,這也是c語言的乙個特色,建議你好好地學一下,很有用的。
2樓:一束斜陽
對陣列來說,a[0]和*a具有相同效果,a[0]相當於位址指標,一般來說速度是相對快一些的。因為引用其他變數時也是先找到位址來使用。
用指標來使用變數時,作實參,則修改形參能達到修改實參的作用。直接用變數則不具有此效果。因為指標作實參傳遞的是位址。
3樓:
在編寫大型的程式時,指標帶來很多方便,速度快也是其中的優點,兩個的區別在於前者指向位址後者指向位址所在的函式值。指標引用上建議另外定義乙個指標變數,因為陣列名最好不拿出來使用。。
4樓:
a[0] a[1] a[2]這樣給出下標,陣列名a是陣列第乙個元素的位址,程式通過 a的位址 + 變數型別的大小 * 陣列下標 就是陣列元素的位址。
*a,*(a+1),*(a+2) 是直接給出陣列元素的位址指向的值。
c語言中指標變數與普通變數的區別是什麼?
5樓:與子如初見
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.
6樓:殳德候寄雲
1、指標變數是變數的一種,指標變數的值是位址(也是整數),普通變數的值是整數、實數或者其他型別。指標變數的主要作用是修改其他函式的區域性變數和訪問陣列。指標變數需要額外的空間存放位址,由於指標變數是間接訪問所指物件,所以比起直接用普通變數名字訪問所指物件而言,速度稍慢。
2、例如:int
a=5;
int*p
=&a;
指標p是乙個整型指標變數,裡面存的是乙個位址,這個位址是a的位址。通過取值運算子*就可以用p訪問a。指標變數使用起來非常靈活,乙個指標變數只佔四個位元組,但是它可以訪問結構體,鍊錶,陣列等多資料集合,而且在訪問這些變數的時候是對記憶體直接訪問,執行效率高。
c語言 指標變數與普通變數的區別
7樓:怕壯
主要是指標有效率. 比如把 乙個長 1m 的字串發給子函式, 讓它輸出到檔案.這個傳遞過程 你傳指標就比傳字串的效率高百萬倍!!
8樓:緩緩掉落的松針
簡單說就是
指標變數存放普通變數的位址,而普通變數儲存資料。
9樓:匿名使用者
普通變數和指標變數不同就是儲存位址
10樓:匿名使用者
void swap(int *x, int *y)void swap(int x, int y)呼叫一下這兩個引數你就知道有什麼區別了,指標才能真正操作你傳入的實參,而變數只能改變形參
指標指向下乙個就是p+1
11樓:與子如初見
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.
12樓:匿名使用者
1、指標變數是變數的一種,指標變數的值是位址(也是整數),普通變數的值是整數、實數或者其他型別。指標變數的主要作用是修改其他函式的區域性變數和訪問陣列。指標變數需要額外的空間存放位址,由於指標變數是間接訪問所指物件,所以比起直接用普通變數名字訪問所指物件而言,速度稍慢。
2、例如:int a=5; int *p = &a;
指標p是乙個整型指標變數,裡面存的是乙個位址,這個位址是a的位址。通過取值運算子*就可以用p訪問a。指標變數使用起來非常靈活,乙個指標變數只佔四個位元組,但是它可以訪問結構體,鍊錶,陣列等多資料集合,而且在訪問這些變數的時候是對記憶體直接訪問,執行效率高。
c語言用指標變數去修改變數的值比變數直接賦值效率高嗎
13樓:匿名使用者
對於你的例子,是否使用指標效率是一樣的,沒有區別。
指標的高效簡潔體現在對複雜物件的操作上,
高效,比如傳遞乙個類,如果使用位址傳遞,實際上只傳遞乙個int大小的位址,而物件傳遞,則需要大量的記憶體空間複製乙個臨時物件。
簡潔,體現在**的靈活上,也不是針對單一的簡單資料型別操作,今後的程式設計中,你經常可以看到類似這樣的語句:while(*p++) **比不使用指標要簡潔。
c語言指標變數和普通變數的區別
14樓:小孫孫的店鋪
指標和普通變數的區別,最簡單的思考應該按整數的兩個不同用法著眼:
整數可以表示序號和數量----數量的概念不必說了,但序號的概念人人都懂但不透徹。
2012表示年----這是序號,它的下一年是2013,即2012+1可得2013,但這裡的1是什麼?是公元1年嗎----是序號還是數量?
2012是今年,2013是明年,兩者能相加嗎?序號+序號是什麼?
指標是什麼?指標是嚴格意義上的序號----儲存位置的編號!
所以指標+數量為指標----成立
反之指標-指標為數量----成立
指標+指標------不成立
c和c++中源**級對儲存資料的訪問有兩種方法:按名字和按指標----就象在大街上按名字(類似變數名)或按門牌號(類似位址)訪問商店一樣。
1、指標變數是變數的一種,指標變數的值是位址(也是整數),普通變數的值是整數、實數或者其他型別。指標變數的主要作用是修改其他函式的區域性變數和訪問陣列。指標變數需要額外的空間存放位址,由於指標變數是間接訪問所指物件,所以比起直接用普通變數名字訪問所指物件而言,速度稍慢。
2、例如:int a=5; int *p = &a;
指標p是乙個整型指標變數,裡面存的是乙個位址,這個位址是a的位址。通過取值運算子*就可以用p訪問a。指標變數使用起來非常靈活,乙個指標變數只佔四個位元組,但是它可以訪問結構體,鍊錶,陣列等多資料集合,而且在訪問這些變數的時候是對記憶體直接訪問,執行效率高。
c語言用指標比較快是不是因為直接訪問尋找變數需要的時間比較多 而指標直接從位址訪問就不用定址費時了?
15樓:mr流星飛逝
可以這麼理解,省去了變數定址的時間。
16樓:匿名使用者
用指標不是減少了定址的時間,是省略了計算位址的步驟,要做的工作少了,所以說速度快。
用指標比較快,這個概念有點過時了。現在的編譯器,**優化的效率是很高的,在設定高優化級別的情況下,兩者幾乎沒有差別。另一方面,使用指標程式設計相對複雜,更容易導致潛在的錯誤,就軟體工程的角度來看,犧牲可靠性來換取速度的小量提公升(甚至速度沒有提公升)是划算的。
結論,減少指標的使用,使用索引就很好。要想提公升執行速度,編譯的時候把優先級別設的高一點就可以了。
c語言到底什麼時候用指標什麼時候用變數
17樓:百度使用者
1. 需要改變實參的時候, 只能用指標.
2. 傳遞大型結構並且"唯讀"其元素的時候,因為大型結構通過值傳遞, 需要拷貝其每個元素, 這樣效率太低.
3. 需要遍歷陣列或頻繁引用其元素時, 這樣效率比使用下標高.
4. 動態分配空間時, 必須使用指標.
5. 傳遞陣列時, 必須使用指標.
6. 函式返回指標時, 比如fopen
這是經驗和技巧的問題, 多寫點**吧:)
18樓:匿名使用者
最簡單的情況:
用指標代替結構,陣列等
用指標返回運算後的結果
舉例:int max(int a, int b, int c);//返回三個數中最大的數,不需要用指標
void swap(int *a, int *b);//交換變數的值,要用指標
void f(char *str);//結構指標或者陣列指標,減少引數傳遞個數
void f(char str[100000]);//這裡要傳整個陣列的100000個數,降低了效率,甚至會有錯誤
19樓:匿名使用者
指標運算是很複雜的,但是又是一門必學的技巧例如:int a=10
int b=a //a
和int *b
b=&a //b
指標還是少用吧
在涉及值的傳遞時,有時候不得不用指標~
實現的方法無所謂的,關鍵是結果~!
20樓:匿名使用者
這個不是一定要怎麼樣怎麼樣的,要看程式設計時對程式設計的演算法的影響哪種更方便些,也與程式設計習慣有關係啊
在c語言裡面宣告指標並用malloc賦值與與直接宣告變數並獲取其指標有何區別?
21樓:
區別當然是有的
link n; 申明結構體實體
&n 結構體位址
link *n; 申明結構體指標
n=malloc(sizeof(link)); 讓結構體指標指向申請的記憶體空間,需要free釋放
後者需要釋放並且申請大小靈活
希望對你有幫助
22樓:戀v天真
首先你得明白malloc函式的作用;malloc函式是在記憶體中找到乙個合適大小的記憶體空間來儲存資料,並讓指標指向這個空間的首位址。它的意義是在建立陣列時,可以建立動態陣列。
比如 int a[n],*p;p=a;是不合法的。而int *p;p=(int *)malloc(n*sizeof(int))卻可以實現建立這樣乙個長度為n的陣列
23樓:百
有區別的。
malloc分配的記憶體是長期的,一直到free,你的指標指向的記憶體才會無效。
但是&n賦值給指標,離開link n所在的函式以後,指標指向的記憶體已經無效了,繼續使用的話會崩潰哦。
100分o(∩_∩)o
C語言如果我定義了指標int p和變數int p,他倆之間有什麼關係嗎
int p int a 1 p a p定義成了bai乙個整du型指zhi針,而a定義成了乙個初始值為1的整型變數。dao指標是用來儲存內對應容型別的變數的位址的,所以p a 的意思是用指標p來儲存變數a的位址。而如果同時定義int p int p 會發生編譯時錯誤,因為p重複定義了。同乙個作用域 內...
c指標變數的問題,C語言指標變數大小的問題
p 1,是把1賦值給p所指向的物件,而p 1是把1賦值給p,這個1是被當做位址的。p 1和p 1是不同的概念,p 1 是賦值語句,還有在c語言中 1 0 是作為真假來用的,就相當於布林型數一樣。這兩個語句都是合法的。區別就是指標 的意思是取位址的意思。p是乙個指標,他的值是記憶體中一塊記憶體的位址,...
c語言字元指標變數,C語言裡為什麼字元指標變數指向的字串常量中的內容是不可取代的?
對於printf這個函式,有著一系列的格式符號 比如你說的 d s不同的格式,有著不同的引數型別要求 比如 s 要求對應引數必須是char 型的 你例子中的string就是這一型別 所以不會出錯 如果換成printf s string string為char 型,對應的格式是 c 而 d對應的是整型...