国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

C語言為什么不檢查數組下標

開發 前端
C語言的設計目標:提供一種能以簡易的方式編譯、處理低級存儲器、僅產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。

引言

最近在查一個bug,查到最后發現是數組越界導致的。數組只有30個字節,代碼卻向這個數組填充了35個數據,這個bug還是偶現的,查到它確實廢了一番功夫。我就突然想到:C語言為什么不檢查數組下標呢???先來個demo驗證下。

#include<stdio.h>
#include<stdlib.h>
int main()
{
int data[5]={0};
for(int i=0;i<8;++i)
{
printf("%d ",data[i]);
}
printf("\n");

return 0;
}

結果顯示,C語言還真的不檢查數組的下標。不僅沒有報錯,而且運行正常。

思考

這就讓我陷入了思考,C語言為什么不檢查下標呢?想上文這么簡單的,data數據組就5個數據,編譯器是知道的,為什么是訪問第8個數據時,編譯器來個報錯也沒有呢?我想到了之前的文章《??指針與數組??》中有如下示例代碼:

void main()
{
int data[4] = {0, 1, 2, 3};
int *p;
p = data +2;
printf("p[-1] is %d\n",p[-1]);
printf("*(p-1) is %d\n",*(p-1));
}

運行結果如下:

不僅可以編譯通過,還能正確的輸出結果為1。這表明,C的下標引用和間接訪問表達式是一樣的。

這讓我突然意識到,數組的這些特性,如數組名本質上是一個常量指針(不懂的同學看之前的推文《??指針與數組??》)C語言很難檢查下標合法性的。

如果C語言檢查數組是否越界,因為當數組出現在表達式中的時候,它會立刻被解讀成指針。此外,使用其他的指針變量也可以指向數組的任意元素,并且這個指針可以隨意進行加減運算。引用數組元素的時候,雖然你可以寫成a[i],但是它只不過是*(a+i)的一種表達,C語言本身的語法是無法檢查的,只能通過編譯器檢查。

那么編譯器將加入額外的代碼用于檢測數組是否越界,C的下標檢查所涉及的開銷比你開始想象的要多。編譯器必須在程序中插入指令,證實下標的結果所引用的元素和指針表達式所指向的元素屬于同一個數組,可能僅僅是個小功能,生成的程序的數組檢查占有大量的代碼空間,這必將影響程序的運行效率。

這也讓我意識到一個事情:數組的標識符(也就是數組名),它只包含并沒有包含數組的長度的信息,它只是個地址信息,也就是上面說的數組名本質上是個常量指針。讀到這里,請你想一下,C語言有提供數組長度的底層函數嗎???

答案是否定的,一般情況下,我們獲取一個數組的長度,我們可以獲取數組所占的內存大小,然后除以單個元素的內存大小計算數組長度。

int a[8];
printf("%d",sizeof(a)/sizeof(a[0]));

為什么不修復“漏洞”

既然我們發現了上述問題,那么那些C語言的大神為什么不修復這個“漏洞”呢?其他編程語言會吸取“教訓”嗎?學過JAVA的同學可以看下面代碼:

int [][] array = {{1,2,3},{1,4}};
System.out.println(array[1][2]);

這也是一個數組越界訪問的例子,但是JAVA的控制臺會打印如下信息:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2

at demo.Array.main(Array.java:31)。

會明確告訴你數組下標越界了,是的,高級語言JAVA是支持的。

那么我們就來講講C語言的設計目標:提供一種能以簡易的方式編譯、處理低級存儲器、僅產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。

如果C語言加入了類似下標檢查,實現一個簡單的數組數據寫入,需要大量指令檢查下標是否正確,那么還符合C語言設計目標嗎?如果C語言有大量的這樣設計,操作系統內核還會使用C語言編寫嗎?單片機等實時系統還會使用C語言嗎?

所以C語言給了程序員更大空間,C語言執行效率高,可以直接訪問硬件,具有非常好的可移植性,所以世界上絕大部分的操作系統內核都是用C語言編寫的。

那么問題來了,JAVA都檢查了數組下標,C語言難道一點進步也沒有嗎?其實也不然,微軟在這一方面也做了貢獻。

在早期的CRT函數中也不對字符串指針或數組進行越界檢查,都是要求程序員確保空間足夠,因此也才也才有了在VS2005之后微軟提供的安全的CRT函數版本。(CRT函數不是本文的重點,不懂的同學請面向百度編程)。

總結

C語言為什么不檢查數組下標???答案一個字:快。

責任編輯:姜華 來源: 知曉編程
相關推薦

2023-11-04 16:26:18

C語言數組

2021-07-09 06:48:29

數組存儲內存

2025-05-29 08:00:00

數組編程語言

2014-02-01 21:25:08

Python數組

2020-09-04 15:34:07

C編程語言開發

2012-06-12 09:47:17

C語言

2024-01-02 10:38:22

Go語言數組

2010-01-22 15:14:37

學習C++

2025-06-26 02:29:00

C語言void*機制

2010-11-03 09:22:00

C語言

2024-04-12 12:36:06

JSJavaScrip方式

2015-05-25 15:31:56

C語言學習和使用 C 語言

2020-10-09 11:06:38

C語言桌面語法

2021-06-06 22:22:32

c語言編程語言

2022-06-26 00:24:57

C語言操作系統語言

2025-01-06 08:28:45

C語言操作系統程序

2023-12-27 08:12:04

切片Go語言

2011-07-05 16:57:53

C語言

2020-04-07 16:12:56

Go編程語言開發

2014-05-07 09:48:39

CC語言
點贊
收藏

51CTO技術棧公眾號

亚洲成人免费视| 日韩欧美一区在线观看| 五月天亚洲综合情| 88久久精品| 亚洲精品xxxx| 三级网站视频在在线播放| 色综合久久中文字幕综合网| 九七影院理论片| 国产日本亚洲高清| 97超碰青青草| 91亚洲精品一区二区乱码| 一区二区三区在线观看www| 欧美专区18| 成人av蜜桃| 亚洲精品2区| 国产三级精品网站| 欧美美女一区| 国产精品成人av性教育| 在线日韩网站| 国产精品自拍偷拍视频| 亚洲色图网站| 久久久福利视频| 免费在线亚洲| 亚洲欧洲三级| 国产美女视频一区| 一区二区三区观看| 韩国成人精品a∨在线观看| 男人的天堂成人| 不卡的av网站| 美女黄色片视频| 国产精品婷婷午夜在线观看| 三上悠亚在线一区二区| 亚洲男人的天堂在线观看| 男人午夜天堂| 在线观看成人小视频| 日本在线看片免费人成视1000| 日韩欧美国产一区在线观看| 人成在线免费网站| 久久精品国产亚洲精品2020| 欧美一级全黄| 91在线观看网站| 日本午夜一区二区| 777精品久无码人妻蜜桃| 中文字幕日韩一区| 欧洲伦理片一区 二区 三区| 精品国产成人在线影院| 欧美与亚洲与日本直播| 国产91精品不卡视频| 欧美激情视频一区二区三区在线播放| 欧美国产一区二区在线| 成人精品小蝌蚪| 2020中文字幕在线播放| 欧美一级一区二区| 成年永久一区二区三区免费视频| 国产成人精品国内自产拍免费看| 欧美日韩18| 2021国产视频| 亚洲色图欧洲色图婷婷| 最新国产在线观看| 一区二区三区在线播放欧美| 午夜a一级毛片亚洲欧洲| 激情视频一区二区| 久久婷婷色综合| 全部免费毛片在线播放网站| 亚洲视频自拍偷拍| 欧美三级三级| 中文字幕在线观看一区二区三区| 国产三级欧美三级日产三级99| 天堂a√在线| 国产午夜精品视频| 婷婷综合在线| 97国产在线播放| 日韩欧美高清在线视频| 91福利精品在线观看| 国产原创欧美精品| 国产成人av电影免费在线观看| 8×8x拔擦拔擦在线视频网站| 精品福利在线导航| 天堂资源在线亚洲| 夜夜爽99久久国产综合精品女不卡| 久久久激情视频| 免费av网站在线看| 91成人在线播放| 久久99精品国产| 夜色资源站国产www在线视频 | 无码人妻精品一区二区三区99v| 亚洲欧洲精品一区二区三区不卡| 亚洲91av| 成人黄色在线播放| 久久人人97超碰com| av网站免费在线观看| 欧美在线影院在线视频| 国产一区二三区| 999国产在线视频| 97欧美精品一区二区三区| 视频一区二区三区入口| 中出福利视频| 中文字幕日韩精品有码视频| 免费永久网站黄欧美| 日本粉色视频在线观看| 这里只有精品丝袜| 国产一区二区高清| 成人片在线播放| 色午夜这里只有精品| 激情综合电影网| 91网页在线看| 欧美高清视频在线观看| 精品亚洲porn| 亚洲羞羞网站| 91av免费看| 亚洲国产成人高清精品| 亚洲精品a区| 日韩xxxx视频| 亚洲美腿欧美激情另类| 日韩成人免费电影| a黄色片在线观看| 99porn视频在线| 亚洲成人自拍一区| 久久夜色电影| 色婷婷综合久久久久中文字幕| 亚洲精品国产免费| 一区二区日韩免费看| 久草视频视频在线播放| 国产成人综合精品在线| 成人免费小视频| 蜜桃一区av| xxxxx国产| 日韩免费观看网站| 1024精品合集| 少妇精品久久久一区二区| www.99.热| 日韩av手机在线| 亚洲在线观看免费| 欧美一级精品| 欧美女优在线观看| 成人av影视在线| 欧美亚洲高清一区二区三区不卡| 在线看片不卡| 91欧美在线视频| 久久av一区二区三区漫画| 欧美日韩一区三区| 国产欧美亚洲一区| 欧美v亚洲v| 黄色网络在线观看| 在线视频欧美性高潮| 91浏览器在线视频| 国产精品任我爽爆在线播放| 好男人看片在线观看免费观看国语| 日本sm极度另类视频| 午夜a成v人精品| 国产精品地址| 国产亚av手机在线观看| 中文字幕超清在线免费观看| 中文精品99久久国产香蕉| 久久久噜噜噜久久人人看| 精品三级av在线导航| 大地资源高清播放在线观看 | 国产一区不卡| 日韩一二三四| 国产精品免费一区二区| 日韩视频一区在线观看| 精品一区二区三区久久| 伊人久久一区| 最新av中文字幕| 麻豆成人在线播放| 中文字幕亚洲一区二区三区| 国产精品成人一区二区艾草| 91精品国产91久久综合| segui88久久综合9999| 欧美激情国产精品日韩| 国产激情999| 3d动漫精品啪啪1区2区免费| 国产精品456| 亚洲影院天堂中文av色| av在线电影观看| 日韩精品视频在线观看视频| 97热精品视频官网| 7777精品伊人久久久大香线蕉| 国产成人免费视频网站 | 亚洲另类黄色| 日韩伦理三区| 三上悠亚在线观看二区| 蜜桃精品久久久久久久免费影院| 伊人久久精品视频| 亚洲国产成人精品视频| 久久爱www久久做| 一本久久青青| 九色porny自拍视频在线观看| 在线观看免费成人av| 精品一区久久久| 欧美激情精品久久久久久大尺度 | 亚洲免费网站| 99视频有精品高清视频| 欧美精品久久久久久久久久丰满| 一卡二卡3卡四卡高清精品视频| 2019中文字幕在线| 亚洲精品国产综合区久久久久久久| 国产精品国产三级国产三级人妇| 久久五月激情| 亚洲裸色大胆大尺寸艺术写真|