C語(yǔ)言中的不完整類型_第1頁(yè)
C語(yǔ)言中的不完整類型_第2頁(yè)
C語(yǔ)言中的不完整類型_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

前述C語(yǔ)言中存在這樣一種類型,名叫不完整類型(Incompletetypes),雖然我們可能不太理解,或許也沒有仔細(xì)研究過,但是在實(shí)際的編程中,我們卻已經(jīng)用到過很多次了。接下來我們就共同學(xué)習(xí)一下,內(nèi)容比較簡(jiǎn)單,一看就懂,一學(xué)就會(huì)。不完整類型不完整類型(Incompletetypes)是缺少足夠信息來確定該類型對(duì)象大小的對(duì)象類型,不完整類型可以在翻譯單元的某些點(diǎn)完整。聽起來可能比較繞口,簡(jiǎn)單來說就是,不完整類型是不知道對(duì)象所占空間大小,此時(shí)是無(wú)法使用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ù)組簡(jiǎn)單來說就是大小未知的數(shù)組,之后指定大小的聲明能使之完整,接下來看一個(gè)示例。#include<stdio.h>

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的長(zhǎng)度編譯時(shí)就會(huì)報(bào)如下錯(cuò)誤:invalidapplicationof'sizeof'toincompletetype'int[]'因?yàn)榇藭r(shí)a為不完整類型,即不知道a的長(zhǎng)度,所以無(wú)法使用sizeof。但有的小伙伴卻有疑問了,為什么在fun1函數(shù)中卻可以設(shè)置a[0]的值?雖然這里使用了數(shù)組a,但是它會(huì)被轉(zhuǎn)換成指向其首元素的指針,而且這個(gè)轉(zhuǎn)換并不需要知道數(shù)組的大小。而且C語(yǔ)言也不會(huì)檢查數(shù)組是否越界,他選擇相信程序員,把重心放在了程序的執(zhí)行效率上,這也是為什么C語(yǔ)言執(zhí)行效率高運(yùn)行快的原因。感興趣可以參考:為什么C語(yǔ)言執(zhí)行效率高,運(yùn)行快?其實(shí)在外部聲明的時(shí)候可以完整聲明,例如上述示例我可以改為:externinta[3];此時(shí)在編譯程序fun1就不會(huì)有編譯報(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限定,有別于其他不完整類型,vo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論