[記錄]你需要知道的C語言誤區

1. 因爲越界訪問造成的無限循環

看代碼:

#include<stdio.h>
int main(int argc, char* argv[]){
	int i=0;
	int arr[3]={0};
	for(;i<=3;++i){
		arr[i]=0;
		printf("%s,%d\n","i: ",i);
	}
}

當運行後會發現,僅僅因爲越界訪問,程序就會進行無限循環,爲什麼呢?
首先要知道這段程序運行需要進行壓棧,而棧是由高地址向低地址生長的。變量i入棧後,數組arr入棧,見下圖。
C語言數組越界造成無限循環
數組首地址是低地址,之後的元素地址依次增加,就比如使用首地址+元素下標*元素大小這樣訪問指定元素。
其次,在C語言中,是隻要不是訪問受限的內存,所有的內存空間都是可以自由訪問。所以,當變量i=3時,arr[3]訪問到了變量i所在的空間,並將其置爲0,造成變量i一直在0~3循環。
最後,這個問題還要注意的一個點是:變量i類型和數組元素類型一致,否則會多訪問或者少訪問,不能精確的修改變量i。

最後, 覺得文章對你有用的話,給個下面的三連吧(點贊,收藏,打賞) !

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章