91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

3天內不再提示

0長度數組不占用存儲空間

嵌入式應用開發 ? 來源:嵌入式應用開發 ? 作者:嵌入式應用開發 ? 2022-09-28 15:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

由于0長度數組是GNU C的擴展,有一些巧妙編寫的詭異代碼,其執行結果就是依賴于編譯器和優化策略的實現的,我們來看看以下代碼:

#include 
#include 

int main(void)
{
    char a[0];
    printf("%pn", a);

    char b[0];
    printf("%pn", b);

    const char *c= "Hello";
    printf("%pn", c);

    const char *d = "Hello";
    printf("%pn", d);

    return EXIT_SUCCESS;
}

編譯結果是:

pYYBAGMz9PuAQcqxAAA-OXsqEvM539.png

可以看到a和b的地址就會被編譯器優化到一處,因為a[0] 和 b[0] 對于程序來說是無法使用的,同樣編譯器對于相同字符串常量,往往地址也是優化到一處,減少空間占用。

所以其本質上涉及到的是一個C語言里面的數組和指針的區別問題,Programming Abstractions in C一書中提到:

“arr is defined to be identical to &arr[0]”.

也就是說,char a[1]里面的a實際是一個常量,即a = &a[0]。而char *b是有一個實實在在的指針變量b存在。所以,a=b是不允許的,而b=a是允許的。

#include 
char a[1];
char *b;

int main () {
 b = a; 
  //a=b會報錯,incompatible types when assigning to type ‘char[1]’ from type ‘char *’
 a = b;
 return 0;
}

兩種變量都支持下標式的訪問,那么對于a[0]和b[0]本質上是否有區別?我們可以通過一個例子來說明。

審核編輯:湯梓紅

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

    關注

    30

    文章

    4900

    瀏覽量

    70794
  • 編譯器
    +關注

    關注

    1

    文章

    1662

    瀏覽量

    50245
  • 數組
    +關注

    關注

    1

    文章

    420

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    嵌入式中零長度數組基本操作方法

    C語言零長度數組,聽起來可能有點奇怪,因為它沒有分配內存空間,無法存儲數據。但實際上,零長度數組在Linux內核中隨處可見。 零長度數組的定
    的頭像 發表于 05-11 08:49 ?1833次閱讀
    嵌入式中零<b class='flag-5'>長度數組</b>基本操作方法

    請問如何將幾十K大小的數組存放在flash里面,不占用內存空間呢?

    請問如何將幾十K大小的數組存放在flash里面,不占用內存空間呢? 用了const好像不管用,還是占用了heap空間
    發表于 07-19 07:10

    IN100 eFuse存儲空間分布

    存儲空間
    橙群微電子
    發布于 :2023年06月12日 10:20:08

    I/O存儲空間什么意思?

    DSP的片內存儲,不是只有程序存儲空間區(RAM)和數據存儲空間區(ROM)嗎?那個 I/O存儲空間區是什么意思?它屬于片內存儲嗎?
    發表于 05-29 21:26

    用C語言編程,如何節省存儲空間

    問題,變量有大有小呀,對的,所以這個時候共用體的空間為內部變量最大占用空間的值。如此這般,共用體就可以通過共享存儲空間,來避免當前沒有被使用的變量所造成的
    發表于 11-19 11:34

    請問C語言中內存地址是否占用存儲空間呢?

    比如內存地址0028FF1C 這些數字和字母是否需要占用存儲空間呢?原因是?
    發表于 05-25 10:14

    存儲空間的分配

    (1)存儲空間的分配###1.片上SRAM
    發表于 07-28 06:06

    采用存儲空間循環使用方法達到延長flash使用壽命

    存儲代碼占用Ram資源極少,不占用Flash用于存儲數據的空間,采用存儲空間循環使用方法達到延
    發表于 01-26 06:25

    請問一下怎樣使定義的字符串數組不占用RAM空間呢?

    ads里沒有CODE關鍵詞,怎樣使定義的字符串數組不占用RAM空間呢?
    發表于 11-30 14:28

    怎樣使定義的字符串數組不占用RAM空間呢?

    ads 里沒有 CODE 關鍵詞,怎樣使定義的字符串數組不占用 RAM 空間
    發表于 03-09 10:51

    存儲空間的概念

    什么是云存儲空間存儲空間是用于存儲對象(Object)的容器,所有的對象都必須隸屬于某個存儲空間
    發表于 05-09 11:59 ?2691次閱讀

    C語言存儲空間與MCU(單片機)

    首先,最近因公司項目需求,暫時學習的去做單片機的開發,因此,需要具備的C編程語言,結合自己以前的移動App開發,總結出如下C語言的常規基礎知識;一:存儲空間本節介紹nX-U8 內核支持的存儲空間。二
    發表于 10-28 09:41 ?11次下載
    C語言<b class='flag-5'>存儲空間</b>與MCU(單片機)

    存儲空間已滿怎么辦?

    存儲空間已滿怎么辦?當云存儲空間已滿時,我們可以采取以下一些常見的步驟來解決問題: 1、刪除不必要的文件: 首先,檢查云存儲中是否有不再需要的文件或數據。刪除這些文件可以立即釋放存儲空間
    的頭像 發表于 11-14 17:44 ?7304次閱讀

    Synology如何使用Nvme固態做存儲空間

    Synology 如何使用Nvme固態做存儲空間
    發表于 10-09 10:55 ?0次下載

    電腦制作云存儲空間,如何使用電腦制作云存儲空間

    ? ? 隨著云計算技術的飛速發展,云電腦應運而生,它打破了傳統電腦的物理限制,為我們提供了一種全新的計算模式,開啟了數字辦公的新紀元。今天就為大家介紹如何使用電腦制作云存儲空間。 ? ?將電腦變成一
    的頭像 發表于 01-13 14:28 ?803次閱讀
    電腦制作云<b class='flag-5'>存儲空間</b>,如何使用電腦制作云<b class='flag-5'>存儲空間</b>
    主站蜘蛛池模板: 看一级特黄a大片日本片 | 天天伊人 | 国产美女一级高清免费观看 | 户外露出精品视频国产 | 国产精品japanese人妖 | 久久婷婷一区二区三区 | 27pao强力打造高清免费高 | 亚洲第八页 | 九九热免费观看 | 天天操天天干天天操 | xxxxxxxx日本69| 你懂的在线免费 | 天天射夜夜爽 | 日本不卡高清视频 | 特一级黄| 男人j进入女人j在线视频 | 欧美视频在线观在线看 | 免费看黄视频 | 日本69xxxxxxxx69 | 亚洲成人综合在线 | 色丁香婷婷 | 国产日韩精品欧美一区色 | 日韩系列| 欧美jizz大又粗 | 国产精品偷伦费观看 | 午夜三级成人三级 | 国产卡1卡2卡三卡网站免费 | 永久在线免费观看 | a一级黄| 日本免费网站 | 亚洲夂夂婷婷色拍ww47 | 天堂视频在线免费观看 | 午夜色综合 | 久久久久国产一级毛片高清版 | 轻点灬大ji巴太粗太长了爽文 | 四虎国产精品免费视 | 操美女在线看 | 夜夜狠操 | 亚洲综合色婷婷 | 欧美日韩国产一区 | 免费h视频在线观看 |