'C語言快速入門——指針與數組'

C語言 設計 皮拉夫大王編程 2019-09-05
"

與數組有關的地址

我本來打算以一個程序開始,讓我們直接理解相關概念。但轉念一想,如果引導你思考問題而得出結論,或許會有另一種效果,因此,我們的討論以下面的定義為基礎。

int a = 9;
int b[3] = { 0, 1, 2 };

程序中定義的每個變量都對應一個具體的地址。我們可以使用&a取到變量a的地址。而數組是一組內存空間連續的存儲,數組中可以有多個元素,而這麼多元素卻只有一個符號(b),那麼它應該代表哪個元素的地址呢?

現在想像你面前有一摞盤子(或一包抽紙),每次從頂上抽取一個總比從中間或底部來的輕鬆方便。語言設計也是如此。如果b代表的是b[1](第二個元素)的地址,那訪問上一個元素就需要減去某個偏移,訪問下一個就需要加上偏移。試想這種情況會應用到循環語句中,那為了使用地址遍歷數據(即,間接訪問),在每次進入循環前還需要調整到開頭地址,這種違背常理、人性、天理不容的設計會讓人咒罵。所以,有些東西的設計不單單是能用,還要便利。

由此我們暫時可以推斷出,數組名與數組第一個元素有關,這樣才能方便連續訪問。下面我們用程序說明。

"

與數組有關的地址

我本來打算以一個程序開始,讓我們直接理解相關概念。但轉念一想,如果引導你思考問題而得出結論,或許會有另一種效果,因此,我們的討論以下面的定義為基礎。

int a = 9;
int b[3] = { 0, 1, 2 };

程序中定義的每個變量都對應一個具體的地址。我們可以使用&a取到變量a的地址。而數組是一組內存空間連續的存儲,數組中可以有多個元素,而這麼多元素卻只有一個符號(b),那麼它應該代表哪個元素的地址呢?

現在想像你面前有一摞盤子(或一包抽紙),每次從頂上抽取一個總比從中間或底部來的輕鬆方便。語言設計也是如此。如果b代表的是b[1](第二個元素)的地址,那訪問上一個元素就需要減去某個偏移,訪問下一個就需要加上偏移。試想這種情況會應用到循環語句中,那為了使用地址遍歷數據(即,間接訪問),在每次進入循環前還需要調整到開頭地址,這種違背常理、人性、天理不容的設計會讓人咒罵。所以,有些東西的設計不單單是能用,還要便利。

由此我們暫時可以推斷出,數組名與數組第一個元素有關,這樣才能方便連續訪問。下面我們用程序說明。

C語言快速入門——指針與數組

"

與數組有關的地址

我本來打算以一個程序開始,讓我們直接理解相關概念。但轉念一想,如果引導你思考問題而得出結論,或許會有另一種效果,因此,我們的討論以下面的定義為基礎。

int a = 9;
int b[3] = { 0, 1, 2 };

程序中定義的每個變量都對應一個具體的地址。我們可以使用&a取到變量a的地址。而數組是一組內存空間連續的存儲,數組中可以有多個元素,而這麼多元素卻只有一個符號(b),那麼它應該代表哪個元素的地址呢?

現在想像你面前有一摞盤子(或一包抽紙),每次從頂上抽取一個總比從中間或底部來的輕鬆方便。語言設計也是如此。如果b代表的是b[1](第二個元素)的地址,那訪問上一個元素就需要減去某個偏移,訪問下一個就需要加上偏移。試想這種情況會應用到循環語句中,那為了使用地址遍歷數據(即,間接訪問),在每次進入循環前還需要調整到開頭地址,這種違背常理、人性、天理不容的設計會讓人咒罵。所以,有些東西的設計不單單是能用,還要便利。

由此我們暫時可以推斷出,數組名與數組第一個元素有關,這樣才能方便連續訪問。下面我們用程序說明。

C語言快速入門——指針與數組

C語言快速入門——指針與數組

示例代碼的註釋中已經給出了足夠多的信息。以前我使用%x輸出地址,更正規的是使用%p格式符。根據最後三行輸出,我們可以看到數組的另一個特性:數組中的所有元素在內存中都是連續存儲的。 這也是數組支持隨機訪問(如a[1], a[5], a[9])的原因。

由輸出可以看到,數組名與數組第一個元素的地址一樣,這代表數組名同時也代表數組首先的地址;但是請注意,&a與a的地址雖然一樣,但它們的意義是完全不一樣的!

數組傳遞到函數

我們不能把一個數組賦給另一個數組以達到拷貝元素的目的,通常這需要我們手動完成。我們在《數組傳遞到函數》一文中曾提到過把數組傳遞給函數時,數組類型事實上被轉換為指針類型了。現在我們使用指針來編寫幾個關於數組的函數。

"

與數組有關的地址

我本來打算以一個程序開始,讓我們直接理解相關概念。但轉念一想,如果引導你思考問題而得出結論,或許會有另一種效果,因此,我們的討論以下面的定義為基礎。

int a = 9;
int b[3] = { 0, 1, 2 };

程序中定義的每個變量都對應一個具體的地址。我們可以使用&a取到變量a的地址。而數組是一組內存空間連續的存儲,數組中可以有多個元素,而這麼多元素卻只有一個符號(b),那麼它應該代表哪個元素的地址呢?

現在想像你面前有一摞盤子(或一包抽紙),每次從頂上抽取一個總比從中間或底部來的輕鬆方便。語言設計也是如此。如果b代表的是b[1](第二個元素)的地址,那訪問上一個元素就需要減去某個偏移,訪問下一個就需要加上偏移。試想這種情況會應用到循環語句中,那為了使用地址遍歷數據(即,間接訪問),在每次進入循環前還需要調整到開頭地址,這種違背常理、人性、天理不容的設計會讓人咒罵。所以,有些東西的設計不單單是能用,還要便利。

由此我們暫時可以推斷出,數組名與數組第一個元素有關,這樣才能方便連續訪問。下面我們用程序說明。

C語言快速入門——指針與數組

C語言快速入門——指針與數組

示例代碼的註釋中已經給出了足夠多的信息。以前我使用%x輸出地址,更正規的是使用%p格式符。根據最後三行輸出,我們可以看到數組的另一個特性:數組中的所有元素在內存中都是連續存儲的。 這也是數組支持隨機訪問(如a[1], a[5], a[9])的原因。

由輸出可以看到,數組名與數組第一個元素的地址一樣,這代表數組名同時也代表數組首先的地址;但是請注意,&a與a的地址雖然一樣,但它們的意義是完全不一樣的!

數組傳遞到函數

我們不能把一個數組賦給另一個數組以達到拷貝元素的目的,通常這需要我們手動完成。我們在《數組傳遞到函數》一文中曾提到過把數組傳遞給函數時,數組類型事實上被轉換為指針類型了。現在我們使用指針來編寫幾個關於數組的函數。

C語言快速入門——指針與數組

在客戶端程序中,我們測試了數組的拷貝函數與變換函數,兩個函數的內部已經有足夠的註釋,以幫助我們理解的更多。希望你能掌握數組名與地址,數組元素與地址的關係,以及基於下標和指針這兩種訪問方式。

"

與數組有關的地址

我本來打算以一個程序開始,讓我們直接理解相關概念。但轉念一想,如果引導你思考問題而得出結論,或許會有另一種效果,因此,我們的討論以下面的定義為基礎。

int a = 9;
int b[3] = { 0, 1, 2 };

程序中定義的每個變量都對應一個具體的地址。我們可以使用&a取到變量a的地址。而數組是一組內存空間連續的存儲,數組中可以有多個元素,而這麼多元素卻只有一個符號(b),那麼它應該代表哪個元素的地址呢?

現在想像你面前有一摞盤子(或一包抽紙),每次從頂上抽取一個總比從中間或底部來的輕鬆方便。語言設計也是如此。如果b代表的是b[1](第二個元素)的地址,那訪問上一個元素就需要減去某個偏移,訪問下一個就需要加上偏移。試想這種情況會應用到循環語句中,那為了使用地址遍歷數據(即,間接訪問),在每次進入循環前還需要調整到開頭地址,這種違背常理、人性、天理不容的設計會讓人咒罵。所以,有些東西的設計不單單是能用,還要便利。

由此我們暫時可以推斷出,數組名與數組第一個元素有關,這樣才能方便連續訪問。下面我們用程序說明。

C語言快速入門——指針與數組

C語言快速入門——指針與數組

示例代碼的註釋中已經給出了足夠多的信息。以前我使用%x輸出地址,更正規的是使用%p格式符。根據最後三行輸出,我們可以看到數組的另一個特性:數組中的所有元素在內存中都是連續存儲的。 這也是數組支持隨機訪問(如a[1], a[5], a[9])的原因。

由輸出可以看到,數組名與數組第一個元素的地址一樣,這代表數組名同時也代表數組首先的地址;但是請注意,&a與a的地址雖然一樣,但它們的意義是完全不一樣的!

數組傳遞到函數

我們不能把一個數組賦給另一個數組以達到拷貝元素的目的,通常這需要我們手動完成。我們在《數組傳遞到函數》一文中曾提到過把數組傳遞給函數時,數組類型事實上被轉換為指針類型了。現在我們使用指針來編寫幾個關於數組的函數。

C語言快速入門——指針與數組

在客戶端程序中,我們測試了數組的拷貝函數與變換函數,兩個函數的內部已經有足夠的註釋,以幫助我們理解的更多。希望你能掌握數組名與地址,數組元素與地址的關係,以及基於下標和指針這兩種訪問方式。

C語言快速入門——指針與數組

"

與數組有關的地址

我本來打算以一個程序開始,讓我們直接理解相關概念。但轉念一想,如果引導你思考問題而得出結論,或許會有另一種效果,因此,我們的討論以下面的定義為基礎。

int a = 9;
int b[3] = { 0, 1, 2 };

程序中定義的每個變量都對應一個具體的地址。我們可以使用&a取到變量a的地址。而數組是一組內存空間連續的存儲,數組中可以有多個元素,而這麼多元素卻只有一個符號(b),那麼它應該代表哪個元素的地址呢?

現在想像你面前有一摞盤子(或一包抽紙),每次從頂上抽取一個總比從中間或底部來的輕鬆方便。語言設計也是如此。如果b代表的是b[1](第二個元素)的地址,那訪問上一個元素就需要減去某個偏移,訪問下一個就需要加上偏移。試想這種情況會應用到循環語句中,那為了使用地址遍歷數據(即,間接訪問),在每次進入循環前還需要調整到開頭地址,這種違背常理、人性、天理不容的設計會讓人咒罵。所以,有些東西的設計不單單是能用,還要便利。

由此我們暫時可以推斷出,數組名與數組第一個元素有關,這樣才能方便連續訪問。下面我們用程序說明。

C語言快速入門——指針與數組

C語言快速入門——指針與數組

示例代碼的註釋中已經給出了足夠多的信息。以前我使用%x輸出地址,更正規的是使用%p格式符。根據最後三行輸出,我們可以看到數組的另一個特性:數組中的所有元素在內存中都是連續存儲的。 這也是數組支持隨機訪問(如a[1], a[5], a[9])的原因。

由輸出可以看到,數組名與數組第一個元素的地址一樣,這代表數組名同時也代表數組首先的地址;但是請注意,&a與a的地址雖然一樣,但它們的意義是完全不一樣的!

數組傳遞到函數

我們不能把一個數組賦給另一個數組以達到拷貝元素的目的,通常這需要我們手動完成。我們在《數組傳遞到函數》一文中曾提到過把數組傳遞給函數時,數組類型事實上被轉換為指針類型了。現在我們使用指針來編寫幾個關於數組的函數。

C語言快速入門——指針與數組

在客戶端程序中,我們測試了數組的拷貝函數與變換函數,兩個函數的內部已經有足夠的註釋,以幫助我們理解的更多。希望你能掌握數組名與地址,數組元素與地址的關係,以及基於下標和指針這兩種訪問方式。

C語言快速入門——指針與數組

C語言快速入門——指針與數組

"

相關推薦

推薦中...