吴忠躺衫网络科技有限公司

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

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

3天內不再提示

數組的下標為什么可以是負數

學益得智能硬件 ? 來源:學益得智能硬件 ? 2024-12-20 11:18 ? 次閱讀

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

#include 


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


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


    return 0;
}

關鍵是這段代碼,編譯運行都很順利。

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

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

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

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

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

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

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

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

    關注

    30

    文章

    4823

    瀏覽量

    69034
  • 數組
    +關注

    關注

    1

    文章

    417

    瀏覽量

    26027

原文標題:數組的下標可不可以是負數

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

收藏 人收藏

    評論

    相關推薦

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

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

    dac5686的IOVDD可以是2.5V嗎?

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

    數組名之間可以直接賦值嗎

    數組之間的賦值能不能直接使用等于號?比如這樣的代碼。 int main(){ int a[5] = {1, 2, 3, 4, 5}; int b[5] = {0}; b = a
    的頭像 發表于 11-26 11:23 ?212次閱讀

    指針數組和二維數組有沒有區別

    指針數組和二維數組有沒有區別?比如這樣的兩個代碼。 int main(){ char *s1[] = { "hello", "world", "total" }; char s2[][6
    的頭像 發表于 11-24 11:12 ?218次閱讀

    C語言數組應用計算機導論A第6講:數組

    C語言數組應用計算機導論A第6講:數組
    發表于 11-20 15:33 ?0次下載

    如何在文本字段中使用上標、下標及變量

    在KiCad的任何文本字段中,都可以通過以下的方式實現上標、下標、上劃線以及顯示變量及字段值的描述: 文本變量“文本變量”可以在 原理圖設置->工程->文本變量 中設置。下圖中設置了一個變量名
    的頭像 發表于 11-12 12:23 ?179次閱讀
    如何在文本字段中使用上標、<b class='flag-5'>下標</b>及變量

    TLV320AIC3254的輸入斷開,采集噪聲數據均為負數還能聽到噪聲,請問負數的底噪是如何產生的?

    TLV320AIC3254的輸入斷開,采集噪聲數據,發現所有的數據均為負數,并且能聽到明顯的噪聲。想請教大家,負數的底噪是如何產生的?謝謝!
    發表于 10-17 07:40

    labview字符串數組轉化為數值數組

    在LabVIEW中,將字符串數組轉換為數值數組是一項常見的任務,尤其是在處理數據采集、信號處理或用戶輸入時。 1. 理解LabVIEW的數據類型 在開始之前,了解LabVIEW中的數據類型是非
    的頭像 發表于 09-04 17:47 ?2831次閱讀

    解析嵌入式編程8種常用的數據結構

    數組是固定大小的結構,可以容納相同數據類型的項目。它可以是整數數組,浮點數數組,字符串數組或什至
    發表于 05-03 10:54 ?540次閱讀
    解析嵌入式編程8種常用的數據結構

    用PWM+DMA,然后用DAC輸出,可以是觸發輸出嗎?

    如果用PWM+DMA,然后用DAC輸出,可以是觸發輸出嗎?輸出的是否是占空比可調的方波,可以是三角波嗎?求大神解答。
    發表于 04-22 06:59

    深入探索KUKA KRL中的數組應用

    如果 CHAR 類型數組的所有數組元素都擁有相同的字符串,則不必單獨初始化每個數組元素。忽略右側的數組下標。(對于一維
    的頭像 發表于 04-18 10:37 ?1339次閱讀
    深入探索KUKA KRL中的<b class='flag-5'>數組</b>應用

    鴻蒙TypeScript學習第17天:【對象】

    對象是包含一組鍵值對的實例。 值可以是標量、函數、數組、對象等
    的頭像 發表于 04-15 15:33 ?709次閱讀
    鴻蒙TypeScript學習第17天:【對象】

    無功補償裝置在不投入電容的情況下顯示負數

    無功補償裝置是一種重要的電力設備,用于調節電網的功率因數,提高電能利用效率。然而,有時在不投入電容的情況下,無功補償裝置會顯示負數,給用戶們一種誤導。 首先,需要明確的是,無功補償裝置的顯示負數并不
    的頭像 發表于 03-06 14:11 ?5719次閱讀

    補償控制器顯示負數如何處理

    補償控制器作為一種重要的工業自動化設備,在各種生產過程中起著至關重要的作用。然而,當遇到負數顯示的情況時,可能會給操作人員帶來困擾。下面將從多個方面對補償控制器顯示負數問題進行全面解析,探討應對方法,幫助企業們更好地處理類似情況。
    的頭像 發表于 02-29 14:24 ?1535次閱讀

    數組和鏈表在內存中的區別 數組和鏈表的優缺點

    內存中的存儲方式: 數組是一種連續存儲的數據結構,它將元素存儲在相鄰的內存位置中。這使得數組的訪問效率高,可以通過下標來直接訪問任何一個元素。 鏈表是一種離散存儲的數據結構,它將元素
    的頭像 發表于 02-21 11:30 ?1134次閱讀
    玩百家乐官网怎么才能赢| 威尼斯人娱乐城微博| 尊龙百家乐官网赌场娱乐网规则 | 百家乐鞋业| 百家乐视频游戏官网| 百家乐游戏世界视频| 信誉百家乐平台| 赌博百家乐的乐趣| 百家乐看澳门| 连环百家乐官网怎么玩| 百家乐官网任你博赌场娱乐网规则| 百家乐官网那里可以玩| 钻石娱乐| 朝阳市| 百家乐官网分析下载| 百家乐官网破解版下载| 百家乐官网园棋牌| 永利百家乐官网娱乐场| 百家乐官网有无规律可循| 蓝盾百家乐官网具体玩法技巧 | 杨公风水24山| 百家乐赌博彩| 大发888游戏平台df888| 娱乐场游戏| 松江区| 太阳城百家乐官网杀祖玛| 犹太人百家乐官网的玩法技巧和规则 | 百家乐官网系列抢庄龙| 百家乐官网特殊计| 百家乐怎么赢博彩正网| 狮威百家乐的玩法技巧和规则| 顶级赌场 官方直营网络赌场| 松江区| 百家乐官网轮盘一体机厂家 | 星期八娱乐城| 百家乐官网赢钱| 属狗与属猪能做生意吗| 百家乐大转轮真人视讯| 网上赌博| 百家乐官网路单破| 视频百家乐代理|