01數(shù)組的下標可以是負數(shù)
C語言中使用數(shù)組,一般來說都是這樣的:
inta[5]={1,2,3,4, 5}; a[0] = 10;語法規(guī)定,數(shù)組的長度必須是個常量,保證數(shù)組所占的內存大小不變。數(shù)組下標從 0 開始,依次往后遞增。于是大部分同學都把它當作了默認的規(guī)則。 其實,數(shù)組的長度可以是0,叫做柔性數(shù)組,目的是讓結構體變成可變長度,可以參考下面的文章: 數(shù)組的長度為0會怎樣? 第二個,數(shù)組的下標也可以是負數(shù),正數(shù)表示向后訪問,負數(shù)表示向前訪問。比如:
int a[5] = {1, 2, 3, 4, 5}; int *p = &a[2]; p[-2] = 0;如果不太明白,可以看下下面的圖片:

對于二維數(shù)組,同樣可以使用小于0的下標來訪問元素。
intarray[3][3]={{1,2,3},{2,3,4},{3,4,5}}; int(*p)[3]=array+2; printf("%d ",p[-1][-1]);指針p指向數(shù)組的第三行,p[-1]表示第二行的首元素地址,p[-1][-1]表示第二行首元素的前面一個元素,即第一行最后一個元素(二維數(shù)組在內存中也是連續(xù)的)。

使用負數(shù)作為下標來訪問數(shù)組,切記內存不要越界,訪問的內存一定是存在的,否則會導致程序奔潰。
02 數(shù)組名可以放在括號中
由于數(shù)組和指針在使用上是等價的,數(shù)組可以使用指針來表示,指針也可以通過下標來訪問:
a[i]= 100; *(a+i) = 100; *(i + a) = 100這三行代碼的效果是一樣的。 所以編譯器也支持這樣的用法:
i[a] = 100;放在二維數(shù)組中就是這樣的:
int array[3][3] = {{1, 2, 3}, {2, 3, 4}, {3, 4, 5}}; printf("%d ",2[array][2]);倒不是推薦這種寫法,筆試題中會出現(xiàn),認識就行。
03 一個字節(jié)保存多個數(shù)據(jù)
可以使用結構體位域來保存。
struct Test { chara:4; charb:4; };冒號表示位域,即a只占3位(二進制數(shù)),b占5位,結構體一共占了一個字節(jié)。 對結構體進行初始化:
struct Test t; t.a=1; t.b=3;在內存中的布局是這樣的:

如果記錄下結構體的地址,直接訪問整個字節(jié),得到的結果就是0x31。
struct Test t; t.a=1; t.b=3; char*s=(char*)&t; printf("%x ",*s);
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
數(shù)據(jù)
+關注
關注
8文章
7250瀏覽量
91506 -
內存
+關注
關注
8文章
3117瀏覽量
75115 -
C語言
+關注
關注
180文章
7630瀏覽量
140971 -
指針
+關注
關注
1文章
484瀏覽量
71097 -
數(shù)組
+關注
關注
1文章
419瀏覽量
26448
原文標題:C語言奇技淫巧:數(shù)組的下標可以是負數(shù) | 一個字節(jié)可以保存多個數(shù)據(jù)
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
熱點推薦
怎么將一個字節(jié)數(shù)組放在USAT?
我看不到將一個字節(jié)數(shù)組放在USAT上的功能。我該怎么做?也沒有字節(jié)的變量類型嗎?與PIC32的字節(jié)一樣,ISUNCORE CHAR?我在網上看過。這似乎不對……所以如果我想在
發(fā)表于 10-08 06:39
為什么STM32F107 LWIP發(fā)送數(shù)據(jù)都會丟最后一個字節(jié)?
程序目的:MCU接收網絡數(shù)據(jù)并處理后,向網絡返回一個數(shù)組。問題是:每次返回給網絡的數(shù)據(jù)都會丟失最后一個字節(jié),具體見程序,麻煩各位高手給指點
發(fā)表于 10-16 02:41
UART 發(fā)送數(shù)據(jù)丟失最后一個字節(jié)
STM32 UART 發(fā)送數(shù)據(jù)丟失最后一個字節(jié)
發(fā)表于 12-04 15:10
?0次下載
關于UART發(fā)送數(shù)據(jù)丟失最后一個字節(jié)問題的詳細解析-pdf
STM32 UART_發(fā)送數(shù)據(jù)丟失最后一個字節(jié)
發(fā)表于 04-10 11:23
?3次下載
如何利用單片機向PC發(fā)送一個字節(jié)數(shù)據(jù)
//流水燈控制碼,該數(shù)組被定義為全局變量
/*****************************************************
函數(shù)功能:向PC發(fā)送一個字節(jié)數(shù)據(jù)
發(fā)表于 11-23 15:53
?8204次閱讀
淺談STM32串口通信(一)基本介紹和一個字節(jié)傳輸?shù)膶崿F(xiàn)
文章目錄0 傳輸引腳1 傳輸一個字節(jié)1.1 發(fā)送一個字節(jié)1.2 接收一個字節(jié)2 代碼2.1 配置2.2 發(fā)送一個字節(jié)2.3 接收一個字節(jié)0
發(fā)表于 12-24 18:51
?14次下載

UART發(fā)送數(shù)據(jù)丟失最后一個字節(jié)
電子發(fā)燒友網站提供《UART發(fā)送數(shù)據(jù)丟失最后一個字節(jié).pdf》資料免費下載
發(fā)表于 08-01 17:57
?1次下載

stm32如何向串口用一個字節(jié)發(fā)送3300這個數(shù)?
stm32如何向串口用一個字節(jié)發(fā)送3300這個數(shù)? STM32是一種嵌入式微控制器,具有高性能,低功耗和低成本等優(yōu)勢。其中,串口通信是嵌入式系統(tǒng)中常用的通訊方式,可以與其他設備或模塊進
c語言中數(shù)組怎么定義
: [ ]; 其中, :數(shù)組中元素的數(shù)據(jù)類型,可以是C語言支持的任何數(shù)據(jù)類型,例如整型、字符型、
評論