chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

數(shù)組的下標為什么可以是負數(shù)

學益得智能硬件 ? 來源:學益得智能硬件 ? 2024-12-20 11:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

最近有同學發(fā)來這樣一段代碼,并提出一個問題,數(shù)組的下標為什么可以是負數(shù)?

#include 


int main()
{
    const char *s = "helloworld";
    const char *p = s + 5;


    printf("%c
", p[-2]);


    return 0;
}

關(guān)鍵是這段代碼,編譯運行都很順利。

首先需要搞懂下標的作用是什么,準確的說,它是個偏移量。

比如 a[3],數(shù)組名 a 作為數(shù)組首元素地址,下標 3 表示從這個地址開始向后移動 3 個元素,至于具體是幾個字節(jié),得看什么元素。

所以 a[3] 完全等價于 *(a + 3),甚至把代碼寫成 3[a] 編譯器也沒意見,表示的都是一個意思。

如果把數(shù)組下標寫成負數(shù),就表示向前偏移。

a[-1] 就是向前偏移一個元素,很顯然,前面這塊內(nèi)存不屬于數(shù)組,不能這樣使用,所以很少見到數(shù)組下標是負數(shù)的。

但是對于這樣精心設(shè)計過的代碼,保證內(nèi)存不會越界的情況下,完全沒有問題。

s 指向了字符 h,p 指向了字符 w,p[-2] 就是往前數(shù)兩個元素,所以打印出來的就是 l。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4940

    瀏覽量

    73053
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    420

    瀏覽量

    27104

原文標題:數(shù)組的下標可不可以是負數(shù)

文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    數(shù)組的初體驗

    程序中也需要容器,只不過該容器有點特殊,它在程序中是一塊連續(xù)的,大小固定并且里面的數(shù)據(jù)類型一致的內(nèi)存空間,它還有個好聽的名字叫數(shù)組可以數(shù)組理解為大小固定,所放物品為同類的一個購物袋,在該購 物
    發(fā)表于 11-25 08:06

    二維數(shù)組介紹

    大家不要認為二維數(shù)組在內(nèi)存中就是按行、列這樣二維存儲的,實際上,不管二維、三維數(shù)組… 都是編譯器的語法糖。 存儲上和一維數(shù)組沒有本質(zhì)區(qū)別,舉個例子: int array[3][3
    發(fā)表于 11-25 07:42

    ++和--運算時數(shù)據(jù)在正數(shù)時計算是正確的,負數(shù)時有時候會溜掉計數(shù),為什么?

    ,稍微快點的時候數(shù)值如果是正數(shù)時正反轉(zhuǎn)都沒問題,計算得到的值也是正確的,但是到了負數(shù)區(qū)就出現(xiàn)計數(shù)不準的情況,感覺像是漏掉計數(shù)一樣,數(shù)值會越來越大。
    發(fā)表于 06-23 07:25

    在CCG3PA datasheet上看到LVTTL input, VDDD<2.7V,是不是說CCG3PA IO/I2C可以是1.8V電平的?

    我在CCG3PA datasheet上看到LVTTL input, VDDD<2.7V,是不是說CCG3PA IO/I2C可以是1.8V電平的? 如果是的話,此時芯片供電來自于VBUS_IN ? VDDD供1.8V嗎?
    發(fā)表于 06-03 10:01

    stm32 DMA串口接收到數(shù)組,數(shù)組元素順序錯亂怎么解決?

    配置DMA循環(huán)模式,使用HAL_UART_Receive_DMA(&huart1,buffer,4)函數(shù)將串口數(shù)據(jù)循環(huán)發(fā)送到4個元素的buffer數(shù)組內(nèi),上位機20ms發(fā)送一次
    發(fā)表于 03-12 08:02

    給uint32_t數(shù)組填充整型值,除使用循環(huán)賦值外有沒有c庫函數(shù)可以實現(xiàn)?

    給uint32_t數(shù)組填充整型值,除使用循環(huán)賦值外有沒有c庫函數(shù)可以實現(xiàn)
    發(fā)表于 03-07 17:05

    原創(chuàng):labview 讀取補碼表示的有符號16位數(shù)時,如何解析成負數(shù)

    二進制表示的,負值用二進制表示時,是以補碼的形式表示。 (正數(shù)的補碼是其本身,負數(shù)的補碼是符號位不變,其他位取反再加1) 2、讀取到用補碼表示的負值后,顯示在PC屏幕上的數(shù)字是一個正數(shù)(例如32位數(shù)
    發(fā)表于 02-21 22:12

    ADS1298負數(shù)的編碼,應該怎么處理?

    由于是送到TFT屏上顯示,沒做過負的顯示。ADS1298是24位,而常見的都是32和16位,我要同時顯示正負數(shù),關(guān)于負數(shù)的編碼,應該怎么處理?
    發(fā)表于 02-12 07:59

    請問PCM4222(AIN+)-(AIN-)的輸入范圍可以是負電壓嗎?

    請問PCM4222(AIN+)-(AIN-)的輸入范圍可以是負電壓嗎?
    發(fā)表于 02-10 07:46

    DAC161S997EVM LOOP(J1)最大電壓可以是多少?可以加個24V電壓嗎?

    DAC161S997EVMLOOP(J1)最大電壓可以是多少?可以加個24V電壓嗎?
    發(fā)表于 01-23 08:14

    ADS5842如何接入和設(shè)置?參考電壓源最低可以是多少?

    如何接入和設(shè)置?參考電壓源最低可以是多少?當?shù)陀谕扑]時1.2V時,對器件性能有什么影響?
    發(fā)表于 01-14 08:35

    請問TI有哪款DA轉(zhuǎn)換器的參考源可以是交流(2khz~20khz)正弦信號的嗎?

    請問TI有哪款DA轉(zhuǎn)換器的參考源可以是交流(2khz~20khz)正弦信號的嗎?我的一個項目里是要用DA產(chǎn)生可變的交流模擬量,希望輸出的交流信號和參考源的交流信號之間相移不超過5度。
    發(fā)表于 12-25 06:59

    使用ADS8341時,其COM腳可以接負電壓嗎,最大可以是多少?

    各位好,想請教一下使用ADS8341時,其COM腳可以接負電壓嗎,最大可以是多少?比如如果接-2V會不會有問題(Vref接4V),謝謝!
    發(fā)表于 12-17 07:32

    SN74CBTLV3257輸入是1.8v,輸出是否可以是3.3v, 上拉電阻是3.3v?

    像這種SN74CBTLV3257的用傳輸門作為選擇器的器件。我輸入是1.8v,輸出是否可以是3.3v, 上拉電阻是3.3v?
    發(fā)表于 12-16 07:30

    dac5686的IOVDD可以是2.5V嗎?

    使用DAC5686遇到一些疑問, 1.手冊說IO的電平為1.8-V/3.3-V CMOS-Compatible Interface,請問,dac5686的IOVDD可以是2.5V么?我的電路圖
    發(fā)表于 12-04 08:31