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

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

最近有同學(xué)發(fā)來(lái)這樣一段代碼,并提出一個(gè)問(wèn)題,數(shù)組的下標(biāo)為什么可以是負(fù)數(shù)?

#include 


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


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


    return 0;
}

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

首先需要搞懂下標(biāo)的作用是什么,準(zhǔn)確的說(shuō),它是個(gè)偏移量。

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

所以 a[3] 完全等價(jià)于 *(a + 3),甚至把代碼寫(xiě)成 3[a] 編譯器也沒(méi)意見(jiàn),表示的都是一個(gè)意思。

如果把數(shù)組下標(biāo)寫(xiě)成負(fù)數(shù),就表示向前偏移。

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

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

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

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

    關(guān)注

    30

    文章

    4955

    瀏覽量

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

    關(guān)注

    1

    文章

    420

    瀏覽量

    27191

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    C語(yǔ)言選擇的幾種不同方法介紹

    \'; else if ( queue == 1 ) letter = \'S\'; elseletter = \'U\'; 一種更簡(jiǎn)潔、更快的方法是使用數(shù)組下標(biāo)獲取字符數(shù)組的值。如下
    發(fā)表于 12-12 07:31

    C語(yǔ)言中除數(shù)為0屬于什么錯(cuò)誤

    0 的錯(cuò)誤,以及援引數(shù)組元素時(shí)下標(biāo)溢出等。 靜態(tài)錯(cuò)誤又可以分為語(yǔ)法錯(cuò)誤和靜態(tài)語(yǔ)義錯(cuò)誤。語(yǔ)法錯(cuò)誤指有關(guān)語(yǔ)言結(jié)構(gòu)上的錯(cuò)誤,如單詞拼寫(xiě)錯(cuò)誤、表達(dá)式中缺少操作數(shù)、括號(hào)不匹配等。靜態(tài)語(yǔ)義錯(cuò)誤指語(yǔ)言意義上錯(cuò)誤,如加法運(yùn)算的兩個(gè)錯(cuò)作數(shù)一個(gè)為
    發(fā)表于 12-08 06:38

    scanf函數(shù)介紹

    \", a));正確 數(shù)組元素可使用的最大下標(biāo) int i,a[10]={1}; for(i=1;i<=10;i++) printf(%d\",a); 錯(cuò)誤 int
    發(fā)表于 12-02 06:07

    數(shù)組的初體驗(yàn)

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

    二維數(shù)組介紹

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

    把CW32L010用FLASH模擬EEPROM

    ; u16 FEE_data[5]={100,200,300,400,500}; // eeprom變量數(shù)組,通過(guò)函數(shù)讀寫(xiě)。eeprom變量名稱→枚舉名→數(shù)組下標(biāo) int main(void
    發(fā)表于 11-24 07:40

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

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

    在CCG3PA datasheet上看到LVTTL input, VDDD&lt;2.7V,是不是說(shuō)CCG3PA IO/I2C可以是1.8V電平的?

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

    二維數(shù)組指定條件刪除指定行,請(qǐng)教

    對(duì)數(shù)組1的第一列進(jìn)行條件判斷,如果小于20,刪除所在行,最終需要得到數(shù)組2
    發(fā)表于 05-13 08:11

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

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

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

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

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

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

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

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

    請(qǐng)問(wèn)PCM4222(AIN+)-(AIN-)的輸入范圍可以是負(fù)電壓?jiǎn)幔?/a>

    請(qǐng)問(wèn)PCM4222(AIN+)-(AIN-)的輸入范圍可以是負(fù)電壓?jiǎn)幔?
    發(fā)表于 02-10 07:46

    DAC161S997EVM LOOP(J1)最大電壓可以是多少?可以加個(gè)24V電壓?jiǎn)幔?/a>

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