從K&D 選摘的譯了一段。據已之好。所以與原文相處甚遠。
The C programming Language
Chapter 5 - Pointers and Arrays
要指標,不要陣列。
陣列就是指標:
在C語言裡,陣列和指標有著天然的親密聯絡,以至於不得不能把它們分開來談。任何用陣列可以實現的操作,都可以用指標來實現。指標實現起來更快。
陣列的下標和指標運算非常相似。在定義變數時,陣列型別變數的值就是陣列中地址偏移為0元素的地址。即:
p=&a[0];
因為陣列名等價於陣列首元素的位置,上面的表示式也可以寫成:
p=a;
關於陣列名和指標,有一點區別必須明確:指標是變數,所以p=a或者p++是合法的。陣列名不是變數,所以a=p或a++是非法的。
當用陣列用作為函式引數時,函式傳遞的實際是陣列的首元素的地址。在被呼叫的函式中,引數是本地變數(local variabe),所以,陣列名就是一個指標。也就是說,一個內容為“地址”的變數。據此,我們可以寫一個測試字串長度的函式strlen():
/* strlen: return length of string s */
int strlen(char *s)
{
int n;
for (n = 0; *s != '\0', s++)
n++;
return n;
}
由於s是一個指標,對其進行自加(s++)是合法的。s++不會影響呼叫strlen()的函式中的原來的字串,而僅僅改變strlen()的私有指標變數s。這意味著下面的呼叫都是正確的。
strlen("hello, world"); /* 靜態字串 */
strlen(array); /* char型陣列 */
strlen(ptr); /* char型指標 */
在定義形參時,
char s[]
和
char *s;
是等價的。我們更喜歡後者。因為它更明確地指出這是一個指標變數。一個陣列名被傳給一個函式時,函式會按自己的愛好選擇把它當成陣列還是指標,並靈活地處理它。如果不會影響程式碼的清晰表達,也可以兩種方法混用。
地址運算:
指標用做函式引數:
在c語言中,函式引數是按值傳遞的,被呼叫函式沒有辦法直接改變呼叫函式中的變數。例如,一個排序程式想通過呼叫swap引數來改變交換兩個引數。這樣寫是不起作用的:
swap(a,b);
在函式這樣實現時:
void swap(int x, int y) /* WRONG */
{
int temp;
temp = x;
x = y;
y = temp;
}
。
上面的函式複製了變數a和b,並把複製的這兩個變數的值做了交換。
正確的呼叫應該這樣寫:
swap(&a, &b);
這時的函式體應該是下面這樣:
void swap(int *px, int *py) /* interchange *px and *py */
{
int temp;
temp = *px;
*px = *py;
*py = temp;
}
指標陣列和指向指標的指標:
指標本身也是變數,他們可以像別的變數一樣被儲存為陣列。
c程式設計--指標與陣列
轉載於:https://www.cnblogs.com/diylab/archive/2007/07/26/832658.html
相關文章
- 指標陣列與陣列指標指標陣列
- C語言 指標與陣列C語言指標陣列
- C++語言程式設計筆記 - 第6章 - 陣列、指標與字串C++程式設計筆記陣列指標字串
- 指標陣列和陣列指標與二維陣列指標陣列
- C陣列和指標陣列指標
- 陣列指標,指標陣列陣列指標
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- Go 陣列指標(指向陣列的指標)Go陣列指標
- 二維陣列與指標陣列指標
- 陣列指標陣列指標
- c語言-運算子,陣列,指標C語言陣列指標
- 【C】 28_指標和陣列分析(上)指標陣列
- 【C進階】28、指標和陣列分析指標陣列
- 陣列,函式與指標 詳解陣列函式指標
- Golang 學習——陣列指標和指標陣列的區別Golang陣列指標
- C語言指標應用程式設計C語言指標程式設計
- C----陣列越界問題、指標入門陣列指標
- C指標和陣列的關係詳解指標陣列
- C語言指標和陣列筆試題C語言指標陣列筆試
- C語言系列之 指標與陣列總複習視訊教程C語言指標陣列
- PTA - C程式設計 NoC - 指標 (11道題)C程式程式設計指標
- (C語言)使用指標列印陣列的內容C語言指標陣列
- 透過指標引用陣列指標陣列
- 3-6指標與陣列的天生姻緣指標陣列
- 陣列地址與指標之間的區別與聯絡陣列指標
- 【原創】淺談指標(十三)指向陣列的指標指標陣列
- 指標陣列練習排列字串指標陣列字串
- C++程式設計開發和指標的關係C++程式設計指標
- 實驗5 C語言指標應用程式設計C語言指標程式設計
- ARM彙編和C語言混合程式設計中陣列的陣列的操作C語言程式設計陣列
- 實驗4 c語言陣列應用程式設計C語言陣列程式設計
- c語言程式設計學習之二維陣列C語言程式設計陣列
- 物聯網學習教程— 多維陣列與指標陣列指標
- 泛型程式設計(模板函式,模板類的套用) Myvector 具體案例 實現可存放int 陣列 char陣列 類物件陣列 以及一組指標泛型程式設計函式陣列物件指標
- 二維陣列的指標的理解陣列指標
- 實驗4_C語言陣列應用程式設計C語言陣列程式設計
- C與指標 第六章 指標指標
- C語言使用指標對陣列指定位置進行插入元素C語言指標陣列