曰本美女∴一区二区特级A级黄色大片, 国产亚洲精品美女久久久久久2025, 页岩实心砖-高密市宏伟建材有限公司, 午夜小视频在线观看欧美日韩手机在线,国产人妻奶水一区二区,国产玉足,妺妺窝人体色WWW网站孕妇,色综合天天综合网中文伊,成人在线麻豆网观看

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

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

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

C語言中的不完整類型是什么

汽車電子技術(shù) ? 來源: typedef ? 作者:typedef ? 2023-02-21 10:03 ? 次閱讀

前述

C語言中存在這樣一種類型,名叫不完整類型(Incomplete types),雖然我們可能不太理解,或許也沒有仔細(xì)研究過,但是在實(shí)際的編程中,我們卻已經(jīng)用到過很多次了。

接下來我們就共同學(xué)習(xí)一下,內(nèi)容比較簡單,一看就懂,一學(xué)就會。

不完整類型

不完整類型(Incomplete types)是缺少足夠信息來確定該類型對象大小的對象類型,不完整類型可以在翻譯單元的某些點(diǎn)完整。

聽起來可能比較繞口,簡單來說就是,不完整類型是不知道對象所占空間大小,此時(shí)是無法使用sizeof()的。但是可以通過后續(xù)再補(bǔ)充完整。

不完整類型主要有下面三種。

已聲明但未定義的類類型

內(nèi)容未知的結(jié)構(gòu)體或聯(lián)合體類型。在同一作用域的后面,定義同一結(jié)構(gòu)體或聯(lián)合體的內(nèi)容的聲明能使之完整。

struct node {
  struct node *next; // struct node 在此點(diǎn)不完整
}; // struct node 在此點(diǎn)完整

未知邊界數(shù)組

簡單來說就是大小未知的數(shù)組,之后指定大小的聲明能使之完整,接下來看一個(gè)示例。

#include

extern int a[];  //此時(shí)a類型為int []是不完整類型

void fun1() {
  printf("sizeof a = %d\\r\\n", sizeof(a)); // error
  a[0] = 88;  //OK
}

int a[3] = {1,2,3};  //此時(shí)a類型為int [3]是完整類型

void fun2() {
  printf("sizeof a = %d\\r\\n", sizeof(a));  //OK
  a[0] = 3;  //OK
}

int main(int argc ,char **argv) {
  fun1();
  fun2();
  return 0;
}

如果在fun1函數(shù)中打印數(shù)組a的長度編譯時(shí)就會報(bào)如下錯(cuò)誤:

invalid application of 'sizeof' to incomplete type 'int[]'

因?yàn)榇藭r(shí)a為不完整類型,即不知道a的長度,所以無法使用sizeof。

但有的小伙伴卻有疑問了,為什么在fun1函數(shù)中卻可以設(shè)置a[0]的值?

雖然這里使用了數(shù)組a,但是它會被轉(zhuǎn)換成指向其首元素的指針,而且這個(gè)轉(zhuǎn)換并不需要知道數(shù)組的大小。

而且C語言也不會檢查數(shù)組是否越界,他選擇相信程序員,把重心放在了程序的執(zhí)行效率上,這也是為什么C語言執(zhí)行效率高運(yùn)行快的原因。

感興趣可以參考:為什么C語言執(zhí)行效率高,運(yùn)行快?

其實(shí)在外部聲明的時(shí)候可以完整聲明,例如上述示例我可以改為:extern int a[3];

此時(shí)在編譯程序fun1就不會有編譯報(bào)錯(cuò)提示了。

因?yàn)閿?shù)組元素不能具有未知邊界數(shù)組類型,所以多維數(shù)組只能在第一個(gè)維度中有未知邊界:

extern int a[][2]; // OK:邊界未知的含有【2 個(gè) int 元素的數(shù)組】元素的數(shù)組
extern int b[2][]; // error:數(shù)組有不完整類型

void 類型

可由 CV 限定,有別于其他不完整類型, void 不能補(bǔ)充聲明為完整類型。

總結(jié)

不完整類型有三種:

  1. void類型(不能被完整)
  2. 數(shù)組長度未知(可被完整)
  3. 已聲明但未定義的類類型(可被完整)

參考鏈接

  • https://en.cppreference.com/w/c/language/type
  • https://en.cppreference.com/w/cpp/language/type

END

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

    關(guān)注

    0

    文章

    10

    瀏覽量

    10222
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7628

    瀏覽量

    139953
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3674

    瀏覽量

    94746
收藏 人收藏

    評論

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

    C語言中的基本數(shù)據(jù)類型

    C語言是非常重要的一門程序設(shè)計(jì)語言,學(xué)好C語言再去學(xué)習(xí)其他編程語言將變得很輕松,因?yàn)榇蟛糠?/div>
    發(fā)表于 04-26 17:33 ?2264次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>的基本數(shù)據(jù)<b class='flag-5'>類型</b>

    Go語言中的整數(shù)類型

    在 Go 語言中,整型可以細(xì)分成兩個(gè)種類十個(gè)類型。
    發(fā)表于 07-20 15:25 ?1071次閱讀

    C語言中基本數(shù)據(jù)類型、變量和常量的使用

    C語言中基本數(shù)據(jù)類型、變量和常量的使用
    發(fā)表于 08-18 16:42 ?3474次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>基本數(shù)據(jù)<b class='flag-5'>類型</b>、變量和常量的使用

    ORcad 菜單欄顯示不完整

    如圖片,orcad安裝后 ,菜單欄顯示不完整,怎么設(shè)置這個(gè)? 用起來 不舒服
    發(fā)表于 03-23 21:27

    畫的電路圖輸出不完整,怎么設(shè)置?

    電路圖輸出不完整,怎么調(diào),還有藍(lán)框的大小能調(diào)嗎?
    發(fā)表于 06-04 13:54

    BMP解碼顯示圖片不完整

    再次請教原子個(gè)你的那個(gè)圖片解碼的(BMP部分的)工程已經(jīng)移植完畢(用的是znFAT32文件系統(tǒng))但是顯示的圖片不完整(左邊顯示的是圖片的右一半,右邊邊顯示的是圖片的左一半)
    發(fā)表于 07-10 04:35

    QT解決串口數(shù)據(jù)接收不完整問題

    1. 相關(guān)文章匯總(1)QT解決串口數(shù)據(jù)接收不完整問題(貌似貼出的代碼可以存下串口接受的全部數(shù)據(jù))(2)qt中使用串口類接收數(shù)據(jù)不完整 (3)Qt5.7串口接收數(shù)據(jù)不完整因?yàn)榇诒緛砭筒皇且淮谓邮?/div>
    發(fā)表于 08-18 06:58

    請問在C語言中如何使用bool類型?

    C語言中如何使用bool類型?
    發(fā)表于 10-22 07:20

    如何解決串口接收數(shù)據(jù)不完整?

    如何解決串口接收數(shù)據(jù)不完整?
    發(fā)表于 11-22 07:37

    rt-thread使用ps顯示的線程名字不完整怎么解決?

    使用ps顯示的線程名字不完整
    發(fā)表于 05-09 10:04

    不完整地址轉(zhuǎn)發(fā)表的拓?fù)浒l(fā)現(xiàn)方法

    出的AFT基本推導(dǎo)規(guī)則BRR的完備性.此外還對基于不完整AFT進(jìn)行拓?fù)浒l(fā)現(xiàn)的NP難問題進(jìn)行了討論,深入剖析了任意實(shí)際的局域網(wǎng)絡(luò)的不完整AFT通過BRR推導(dǎo)完成后的各種可能情況,并分析了單純依靠AFT進(jìn)行拓?fù)浒l(fā)現(xiàn)的局限性.該工作對于基于AFT進(jìn)
    發(fā)表于 01-12 16:28 ?0次下載
    <b class='flag-5'>不完整</b>地址轉(zhuǎn)發(fā)表的拓?fù)浒l(fā)現(xiàn)方法

    C語言中隨機(jī)數(shù)的生成代碼

    C語言中隨機(jī)數(shù)的生成完整代碼:
    的頭像 發(fā)表于 02-20 09:21 ?1.1w次閱讀

    APM32F091RCT6_SPI_從機(jī)接收數(shù)據(jù)不完整

    APM32F091RCT6_SPI_從機(jī)接收數(shù)據(jù)不完整
    發(fā)表于 11-09 21:04 ?0次下載
    APM32F091RCT6_SPI_從機(jī)接收數(shù)據(jù)<b class='flag-5'>不完整</b>

    淺談C語言中的三種不完整類型

    不完整類型(Incomplete types)是缺少足夠信息來確定該類型對象大小的對象類型,不完整類型
    發(fā)表于 12-16 09:52 ?611次閱讀

    如何獲取ChatGPT回答不完整的內(nèi)容

    ____tz_zs 對于 ChatGPT 回答不完整的情況(篇幅限制,沒有說完),可以輸入“繼續(xù)”指令,讓其繼續(xù)回答下去,獲得完整內(nèi)容。 如下圖,發(fā)問 “使用web3js 調(diào)用 eth鏈智能合約” 直到這里才是獲得了剛剛問題 “使用web3js 調(diào)用 eth鏈智能合約”
    發(fā)表于 02-10 10:48 ?0次下載
    如何獲取ChatGPT回答<b class='flag-5'>不完整</b>的內(nèi)容