C----陣列越界問題、指標入門
**
一、陣列的越界問題
**
閱讀下面的程式,你覺得結果會是怎樣的呢???
int main()
{
int i;
int arr[10];
for( int i = 0; i<=10; i++)
{
arr[i] = 0;
printf("%d\n",i);
}
return 0;
}
執行發現會發生死迴圈,到底是怎麼個情況
首先我們要清楚 ,在定義時 int arr[10];這 裡的10表示的是陣列的長度,而在使用時: arr[i] = 0;這裡的i表示的是陣列的下標。根據習慣,我們從0開始標記,在本題中也就是0~9。
在上面的程式中,當 i = 10; arr[i] = 0; 我們知道10已經超過了這個範圍,那麼,會發生什麼狀況呢?
區域性變數( 定義在函式內部的變數)是儲存在棧空間中的,即先進後出。如下圖所示:
先定義的i, i先進入棧中,在棧底,arr[10]隨後進入棧中,棧底的地址大,棧頂的地址小,要注意的是,雖然arr[0]要比arr[1]早進來,但是arr[1]永遠比arr[0]的地址大。
如左圖:
當i 1~9時,arr[i]被賦值為0,當 i=10時,會發生溢位,陣列越界,會牽涉到其鄰近元素,在這個題中,陣列會把i預設成10,執行arr[i] = 0後, i 變為 0,又會重新進入迴圈中去,發生死迴圈。
而事實上,陣列越界的結果是難以想象的,不知道會殃及誰,不知道會發生什麼,因此,在使用陣列時一定要仔細,預防陣列越界問題。
解決的辦法:::
在Visual Studio 2012 編譯器中,系統在給變數分配地址時,不會讓每個變數的地址緊挨著,中間都會被2個“炸彈”隔開,因此在陣列越界時,也就是i=10時,會觸碰到炸彈,導致編譯出錯,因此來提醒我們陣列發生了越界情況。
二、指標初入門
概念:
1、指標==地址
2、* 的三個作用:
(1)3*4 //乘法
(2)int *p //定義一個整型指標變數
(3)*p //解引用
3、 指標大小:與平臺有關
x86或者32位平臺,4位元組
x64或者64位平臺,8位元組
4、指標的存放
通過以前的學習,我們都知道
int a = 10; //整型變數存放整型值
char b = ‘x’; //字元變數存放字元值
double c = 12.3; //浮點型變數存放浮點值
此次類推:
整型指標(地址)變數存放整型指標值
int *p=&a;
閱讀下面的程式碼,理解每條語句的含義
int main()
{
int a = 10;
int b = 20;
int *p = &a;
*p = 100;//a = 100;
p = &b;
*p = 200;//b = 200;
int **pp = &p;
*pp = &a;//p = &a;
**pp = 1000;//a = 1000;
*pp = &b;//p = &b;
**pp = 2000;//b = 2000;
return 0;
}
如上圖所示,整型指標變數P可以儲存a的地址或b的地址,因此 *p(解引用可以得到a或b的值。
相關文章
- 陣列指標,指標陣列陣列指標
- 陣列指標 指標陣列陣列指標
- 指標陣列與陣列指標指標陣列
- 陣列指標和指標陣列陣列指標
- 指標陣列和陣列指標與二維陣列指標陣列
- Go 陣列指標(指向陣列的指標)Go陣列指標
- 雙指標查詢陣列的連續規律子陣列問題指標陣列
- 陣列指標陣列指標
- 陣列指標:a pointer to an array,即指向陣列的指標陣列指標
- 陣列和指標的問題陣列指標
- 陣列越界的用途陣列
- 陣列和指標陣列指標
- 指標和陣列指標陣列
- Golang 學習——陣列指標和指標陣列的區別Golang陣列指標
- C++ 指標陣列與陣列指標的區別C++指標陣列
- 徹底搞清C/C++中一維陣列,二維陣列,指標,陣列指標和指標陣列以及指向指標的指標,行地址和列地址之間的關係C++陣列指標
- 指向陣列的指標陣列指標
- C陣列和指標陣列指標
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- C語言程式設計基礎:指標陣列與陣列指標C語言程式設計指標陣列
- C語言學習歷程(十二)陣列指標與指標陣列C語言陣列指標
- .NET 下 模擬陣列越界陣列
- C語言指標和陣列筆試題C語言指標陣列筆試
- hdu 1277 AC自動機入門(指標版和陣列版)指標陣列
- 二維陣列與指標陣列指標
- 二維陣列和指標陣列指標
- 關於二維陣列指標的問題陣列指標
- C++語言中陣列指標和指標陣列徹底分析(系列一) (轉)C++陣列指標
- 指標,c入門指標
- 【原創】淺談指標(十三)指向陣列的指標指標陣列
- C語言 指標與陣列C語言指標陣列
- 指標和二位陣列指標陣列
- 陣列與指標&氣泡排序陣列指標排序
- 字串指標與字元陣列 (轉)字串指標字元陣列
- 指標陣列練習排列字串指標陣列字串
- 在COM中使用陣列引數-陣列指標 (轉)陣列指標
- 補充內容:C++語言中陣列指標和指標陣列徹底分析 (轉)C++陣列指標
- 陣列,函式與指標 詳解陣列函式指標