免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
數(shù)組和指針并不相同

extern int *x;

extern int  y[];

x是一個(gè)指向int類型的指針,y是一個(gè)int型數(shù)組,沒(méi)有給出數(shù)組長(zhǎng)度,是不完整類型,但是聲明的時(shí)候數(shù)組的長(zhǎng)度并不是必須,但我還是建議加上數(shù)組的維數(shù),那樣只看聲明就能知道數(shù)組有多大。上面兩個(gè)聲明是不同的數(shù)據(jù)類型。

什么是聲明,什么是定義?

聲明相當(dāng)于普通的聲明:它所說(shuō)明的并非自身,而是描述其他地方創(chuàng)建的對(duì)象。

定義相當(dāng)于特殊的聲明:它為對(duì)象分配內(nèi)存。

這就是為什么一個(gè)函數(shù)在main函數(shù)之前定義,我們不用再聲明,main也可以調(diào)用這個(gè)函數(shù),因?yàn)槎x是特殊的聲明。

 但是C語(yǔ)言,它本身為了和老代碼兼容以及一些歷史遺留問(wèn)題,讓它變得有些缺陷。比如,都知道定義只能有一次,聲明可以有多次。

eg:

#include<stdio.h>int a;int a;int main(void){    int b;    int b;        return 0;}

變量b會(huì)報(bào)重復(fù)定義,但是變量a卻不會(huì),奇怪么?局部變量,和上面說(shuō)的一樣,定義只能一次,聲明可以多次,所以變量b重復(fù)定義,但是為什么變量a編譯器通過(guò)了這種寫法呢?這里是定義了兩次還是其他情況?

我們把上面的變量b去掉,只測(cè)試變量a:

#include<stdio.h>int a=3;int a;int main(void){        return 0;}

 

#include<stdio.h>int a;int a=1;int main(void){        return 0;}

 

這樣三種寫法,編譯都通過(guò),那么我們?cè)贉y(cè)試:

#include<stdio.h>int a=3;int a=1;int main(void){        return 0;}

終于,報(bào)錯(cuò)了。從測(cè)試過(guò)程來(lái)看,gcc還是不允許多次定義同一個(gè)變量的。那么為什么前面的測(cè)試看起來(lái)像是重復(fù)定義了呢?這是因?yàn)閏語(yǔ)言的全局變量,默認(rèn)有外部屬性,int a;int a=1;這樣的,第一個(gè)是聲明,第二個(gè)是定義,只有在全局變量時(shí)才是這樣,上面的int a,相當(dāng)于extern int a;所以前面三種測(cè)試沒(méi)報(bào)錯(cuò)。這個(gè)缺陷,在c++中已經(jīng)修復(fù),c++中絕對(duì)不允許這樣的寫法。

#include<iostream>int a;int a=1;int main(void){    return 0;}

像這樣的C語(yǔ)言灰色地帶還有很多。

 

所以,使聲明和定義相匹配是很重要的。

經(jīng)過(guò)gcc檢測(cè),形如:

 

extern char *p;
char p[10]="abcd";

這樣的聲明和定義是不能通過(guò)編譯器的,或許c專家編程還是有點(diǎn)古老了吧。

 

 

 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
二維數(shù)組指針表示,C語(yǔ)言指針引用二維數(shù)組詳解
第十章 指 針
【原】C語(yǔ)言函數(shù)返回?cái)?shù)組的問(wèn)題
C/C 指針詳解之提高篇
C語(yǔ)言學(xué)習(xí)篇(15)-----函數(shù)傳參詳解
C語(yǔ)言學(xué)習(xí)——指針精華(1)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服