最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言中定義與聲明有哪些區(qū)別

 更新時間:2022年07月07日 09:27:25   作者:竹葉青輕清゛  
在C/C++中有一個基礎(chǔ)且重要的知識,什么是聲明?什么是定義?他們的區(qū)別是什么?本文將帶你理清其中的區(qū)別

一、變量的聲明與定義

首先,舉個簡單的例子:

int a;
extern int b;

這里的兩個變量,哪個是聲明?哪個是定義?

為解決這個問題,我們必須要知道聲明與定義的含義。

聲明:聲明是用來告訴編譯器變量的名稱和類型,而不分配內(nèi)存。

  • 告訴編譯器,這個變量或者對象已經(jīng)匹配到一塊內(nèi)存空間上了,下面代碼中用到的變量或者對象會在別的地方定義,但此處并不分配內(nèi)存,所以聲明可以出現(xiàn)多次;
  • 告訴編譯器,這個名字已經(jīng)被預(yù)定了,別的地方不能再用它作為變量或者對象名。這種聲明最典型的例子就是函數(shù)參數(shù)的聲明。

定義:就是編譯器為一個變量或者對象分配到一塊內(nèi)存空間上,并給它取名字。這個名字就是變量名或?qū)ο竺酝幻值淖兞炕蛘邔ο笾荒鼙欢x一次,當(dāng)多次被定義的時候,編譯器就會提示重復(fù)定義同一變量或?qū)ο蟮腻e誤。

定義是為了給變量分配內(nèi)存,可以為變量賦初值。

在上述代碼中,extern 是一個關(guān)于聲明的關(guān)鍵字,放在變量或者函數(shù)前用于聲明,用來說明”此變量或者函數(shù)在別處定義“。

注意的是:即使使用了extern,如果給變量附了值,就是定義了。

我們現(xiàn)在知曉了聲明和定義的含義,那么對于上面的例子,我想答案早已浮出水面。

int a;			//此語句為定義
extern int b;	//此語句為聲明

示例:

extern int a;		//此語句為聲明
extern int b = 10;	//此語句為定義
typedef int INT; 	//此語句為聲明
struct Node; 		//此語句為聲明
int c ;				//此語句為定義
struct Node {		//此語句為定義
    int left;
    int right;
};

上述代碼中,變量名c,其類型為int,配分4字節(jié)的內(nèi)存空間(不同編譯器可能會有差異)。

二、函數(shù)的聲明與定義

首先,我們同樣先了解一下它們的含義

函數(shù)聲明:告訴編譯器,函數(shù)的名稱、參數(shù)類型和數(shù)量以及函數(shù)返回值的類型。

函數(shù)定義:為了給函數(shù)分配內(nèi)存空間。

例如:

int Max(int x, int y);	//此處聲明了一個函數(shù),其函數(shù)名為Max,參數(shù)為int x,int y,返回類型為int
int Max(int x, int y) {return x > y ? x : y;}	//此處定義了一個函數(shù)

函數(shù)的定義包含了函數(shù)的具體實現(xiàn)。

函數(shù)只要有實現(xiàn)(存在函數(shù)體{…})即為定義,否則為聲明。

注:為什么這里的函數(shù)聲明不用寫extern?函數(shù)一般是全局的,即他的可見性是最大范圍的,在別的文件也可以訪問這個函數(shù),其實函數(shù)默認就是extern,所以可以不寫。

另外,當(dāng)在函數(shù)前加static 時,則函數(shù)的作用域僅局限于本文件。

再來看一段代碼

/*  basic_stdy.h */
#ifndef _BASIC_STDY_H_
#define _BASIC_STDY_H_
//extern int a;		//在頭文件中聲明,必須加上extern,否則就是重定義
//void fun();		//不用加extern也可以
#endif
/*  basic_stdy.cpp */
#include"basic_stdy.h"
#include<iostream>
using namespace std;
int a(2);
void fun(){
            cout << a <<endl;
}
/* main.cpp */
#include<iostream>
//#include "basic_stdy.h"
using namespace std;
extern int a;		//ok不用包含頭文件, 變量只要聲明即可
extern void fun();	//ok不用包含頭文件, 函數(shù)只要聲明即可
int main(int argc,char **argv){
	cout << a << endl;
	fun();
	system("pause");
	return 0;
}

上述代碼中一共有三個文件basic_stdy.h、basic_stdy.cpp和main.cpp,要在main.cpp中使用其他文件中定義的變量和函數(shù),有以下兩種實現(xiàn)方式:

1、在basic_stdy.h頭文件中,聲明他們,然后在main.cpp中去包含頭文件;

2、在main.cpp中直接extern。

三、總結(jié)

  • 變量或函數(shù)可以聲明多次,但變量或函數(shù)的定義只能一次;
  • 聲明不會分配內(nèi)存,定義會分配內(nèi)存;
  • 聲明是告訴編譯器變量或函數(shù)的類型、名稱等,而定義是告訴編譯器變量的值,函數(shù)的具體實現(xiàn)。

到此這篇關(guān)于C語言中定義與聲明有哪些區(qū)別的文章就介紹到這了,更多相關(guān)C語言定義與聲明內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ deque與vector對比的優(yōu)缺點

    C++ deque與vector對比的優(yōu)缺點

    這篇文章主要介紹了C++中deque與vector相比的優(yōu)勢與劣勢,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • C++實現(xiàn)LeetCode(44.外卡匹配)

    C++實現(xiàn)LeetCode(44.外卡匹配)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(44.外卡匹配),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++11?成員函數(shù)作為回調(diào)函數(shù)的使用方式

    C++11?成員函數(shù)作為回調(diào)函數(shù)的使用方式

    這篇文章主要介紹了C++11?成員函數(shù)作為回調(diào)函數(shù)的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • opencv3/C++輪廓的提取與篩選方式

    opencv3/C++輪廓的提取與篩選方式

    今天小編就為大家分享一篇opencv3/C++輪廓的提取與篩選方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 關(guān)于雙向鏈表的增刪改查和排序的C++實現(xiàn)

    關(guān)于雙向鏈表的增刪改查和排序的C++實現(xiàn)

    下面小編就為大家?guī)硪黄P(guān)于雙向鏈表的增刪改查和排序的C++實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C++中友元函數(shù)(friend)解析

    C++中友元函數(shù)(friend)解析

    這篇文章主要分享了C++友元函數(shù)講解,C++提供了一種形式的訪問權(quán)限,叫做友元,友元有三種,分別是友元函數(shù)、友元類和友元成員函數(shù),下面將詳細介紹該內(nèi)容,需要的小伙伴可以參考一下
    2022-01-01
  • C++實現(xiàn)LeetCode(114.將二叉樹展開成鏈表)

    C++實現(xiàn)LeetCode(114.將二叉樹展開成鏈表)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(114.將二叉樹展開成鏈表),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++ 私有析構(gòu)函數(shù)的作用示例詳解

    C++ 私有析構(gòu)函數(shù)的作用示例詳解

    這篇文章主要介紹了C++ 私有析構(gòu)函數(shù)的作用,私有析構(gòu)函數(shù)不會影響棧上對象的自動析構(gòu),它們會在其作用域結(jié)束時自動調(diào)用析構(gòu)函數(shù)。私有析構(gòu)函數(shù)主要影響的是對堆上對象的顯式刪除操作,需要的朋友可以參考下
    2023-06-06
  • 深入理解c語言數(shù)組

    深入理解c語言數(shù)組

    這篇文章主要介紹了c語言數(shù)組,有需要的朋友可以參考一下
    2013-12-12
  • 一篇文章教你在C++中操作符可分為哪幾種類和用法

    一篇文章教你在C++中操作符可分為哪幾種類和用法

    這篇文章主要介紹了C++編程中操作符的種類和用法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09

最新評論

宿州市| 齐河县| 谷城县| 旬阳县| 双桥区| 家居| 汶川县| 陈巴尔虎旗| 金阳县| 乐昌市| 大安市| 马龙县| 建平县| 蕉岭县| 弋阳县| 巴塘县| 买车| 芜湖市| 宁远县| 广南县| 久治县| 阳原县| 锡林郭勒盟| 合山市| 桦南县| 黄石市| 和平县| 东源县| 隆回县| 深州市| 宜兰县| 鹤岗市| 和林格尔县| 晋江市| 南城县| 祁门县| 沈阳市| 延庆县| 息烽县| 花垣县| 綦江县|