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陣列指標
- 雙指標查詢陣列的連續規律子陣列問題指標陣列
- 陣列指標陣列指標
- hdu 1277 AC自動機入門(指標版和陣列版)指標陣列
- Golang 學習——陣列指標和指標陣列的區別Golang陣列指標
- C陣列和指標陣列指標
- .NET 下 模擬陣列越界陣列
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- C語言指標和陣列筆試題C語言指標陣列筆試
- 透過指標引用陣列指標陣列
- 二維陣列與指標陣列指標
- 指標,c入門指標
- 【原創】淺談指標(十三)指向陣列的指標指標陣列
- 指標陣列練習排列字串指標陣列字串
- C語言 指標與陣列C語言指標陣列
- c語言-運算子,陣列,指標C語言陣列指標
- c程式設計--指標與陣列C程式程式設計指標陣列
- 陣列,函式與指標 詳解陣列函式指標
- 二維陣列的指標的理解陣列指標
- PHP入門之陣列PHP陣列
- php陣列問題PHP陣列
- leetcode題解(陣列問題)LeetCode陣列
- 【C進階】28、指標和陣列分析指標陣列
- 日常學習儲存--陣列和指標陣列指標
- 【C】 28_指標和陣列分析(上)指標陣列
- Go 快速入門指南 - 陣列Go陣列
- 樹狀陣列快速入門陣列
- Java入門教程七(陣列)Java陣列
- C指標和陣列的關係詳解指標陣列
- C語言演算法競賽入門(二)—陣列元素移動、排序問題、猴子選大王問題C語言演算法陣列排序
- 常見指標型別入門指標型別
- 力扣之反轉字串之原地修改輸入陣列(雙指標方式)力扣字串陣列指標
- 【原創】淺談指標(九)二維陣列和多級指標相關指標陣列
- Java入門系列-10-陣列Java陣列