微控制器C語言陣列元素下標多於元素數的時候,編譯器或者說C語言

2021-04-15 12:27:05 字數 2798 閱讀 5714

1樓:匿名使用者

你發現來bug了?jbduanxuan[7]是最後一個沒錯。源這jbduanxuan[20]編譯程式居然bai給通過了?那可du要了命了

zhi,誰知道他還dao會犯什麼錯誤啊?難不成都讓我們自己把關?

如果讓我猜,編譯程式就當這個陣列資料連續存放,反正往後數唄,20就20,你沒試試200?在不報錯就2000,記憶體都裝不下了,它還說啥?

我從來沒試過,開眼了。

c語言中陣列元素的下標可不可以是陣列元素,另外··

2樓:無聲的硝煙

c語言程式執行時,陣列的存在形式是記憶體中的一塊連續地址空間。而訪問陣列元素時,計算機會將下標做為空間首地址的偏移量來進行定址,所以當然可以是任何整形數。

比如int array[10],array的地址是0x7fffff00,那麼在訪問array[3]時,計算機是這樣計算的:

每個整形數大小為4個位元組,所以用array的地址加上3乘以4,得到0x7fffff0c,那麼從0x7fffff0c到0x7fffff0f這4個位元組的值就是array[3]的值。

所以無論傳入的下標是什麼,理論上都可以計算得到一個地址,但是這個地址不一定是有效的。如果地址無效,就會發生段錯誤(segmentation fault),也即陣列越界/地址訪問越界。現在的編譯器會認為只要下標是個整型變數,就是可以的,但是執行的時候作業系統仍然會進行監測,否則會影響其他程式的執行。

比如說a = , b = ,那麼b[a[3]] = b[5]=6,這個是可以允許的。

3樓:匿名使用者

當然可以,只要能夠被解釋成整數的都可以

c語言中陣列元素下標的上下限是什麼?

4樓:金色潛鳥

上下限就是 最大允許 下標

數值 和 最小允許 下標數值。

int c[5]; 允許的下標值是 0,1,2,3,4所以 最大下標 4,最小下標 0

也就是 可以 用 到 c[0] 和 c[4];

不允許用 c[5],c[6]...

不允許用 c[-1],c[-2]...

5樓:匿名使用者

例題:(1)在c語言中,若定義一個一維陣列int c[5];則c陣列元素下標的上限是_4_,下限_0_

其實c語言是不檢測下標是否越界的。你寫c[7],c[-2]都不會報錯

請問:c語言中,陣列元素引用時下標的下限是什麼?

6樓:匿名使用者

下限是0

上限應該是long型的最大值,不過這個也不確定,各個編譯器各個作業系統有不同的處理方法。

在c語言中,引用陣列元素時,其陣列下標的資料型別允許是

7樓:匿名使用者

b比如int a[20]

下表就可以是常量,

i=8 j=9

a[i+j]

也行,下標i+j就是整形表示式

8樓:匿名使用者

推薦回答b比如int a[20] 下表就可以是常量, i=8 j=9 a[i+j] 也行,下標i+j就是整形表示式

9樓:匿名使用者

a。陣列下標必須是整型的!而且c不會幫你去算,必須是個常量!

10樓:樹幹草莓

選a,整型常量表示式,整型表示式有可能是變數的,b不對

11樓:

想你想好想見你想你下班寫吧寫吧擺大巴

c語言中用指標和用下標訪問陣列元素的本質區別

12樓:匿名使用者

兩者意思一樣,但是編譯器處理起來不見得一樣。就像樓上的例子a[2]跟*(a+2)是一個意思。但是對於編譯器來說a[2]是一種固定的寫法,因此對於地址偏移什麼的有固定的處理方式,而*(a+2)在語法上應當分解為先算a+2再取值,如果編譯器不優化,完全按照這種定義去編譯的話,那麼就會有先算出a+2這個地址這一步,因此效率要低些。

至於編譯優化能不能使兩者一致,那就很難說了。

比如我編了這樣一個程式

int a[100];

int b;

int i,j,k;

for(i=0;i<1000000;i++)}}和把b=a[0]換成b=*(a)所耗時間一樣。而分別換成b=a[k]和b=*(a+k)後者所耗時間明顯增加很多,前者也有所增加,但比較少。編譯器優化不能用這個語句測試,因為整個會被優化掉。

13樓:匿名使用者

只有語法有區別

本質沒有區別,本質c是把陣列當作指標來用的。

比如說下面的定義:

int a[3];

2[a]=10;

這樣是合法的。

2[a] = 10被翻譯成*(2+a)=10; 等價*(a+2)=10;等價於a[2]=10;

不過別這麼寫。over

14樓:匿名使用者

胡海濤 21棟強勢圍觀,不要以為我們不知道是你問的,我要告訴c語言老師!你慘了。

15樓:匿名使用者

21棟109前來圍觀

16樓:低調地淡定

無論指標指向的內容有多大,指標都只有4個位元組。從內容上來看,存取指標佔用空間小。

另外,陣列名本身就可以當做是一個地址,所以指標訪問與下標訪問,並無多大區別。

17樓:曾哥鐵血史泰龍

21棟110圍觀樓主杯具..

微控制器與c語言,微控制器與c語言

這樣.假設三個按鍵分別連在微控制器p1.0 p1.1 p1.2三個io口上,按下去為低電平,不按為高電平。include 你是什麼微控制器?自己把標頭檔案包含好哦。define keymask 0x07 對應二進位制0000 0111,作用是取出p1連結有按鍵的最低三位 int key 記錄按鍵 i...

c語言陣列題有陣列,資料元素從下標為1的位置開始存放,試編寫演算法 刪除陣列

include int shanchu int a,int n for j i j n 1 j return n 1 void print int a,int n printf n int main print a,n n shanchu a,n print a,n return 0 有問題請追問。...

學習微控制器c語言哪些書比較好,學習微控制器C語言,哪些書比較好?

看微控制器c語言 教bai程如郭du天祥的 新概念51微控制器c語言教程 zhi 如果dao不會c語言的話先內把c語言學好,學譚浩強容 c程式設計 有c語言基礎學c語言程式設計就沒多大問題。微控制器是軟硬體結合的東西,所以需要學好軟體和硬體兩部分 軟體 可以學彙編,也可以學c語言,建議學習c語言,因...