c 函式宣告為什麼要加地址符號,整個程式如下

2022-08-20 06:37:03 字數 5600 閱讀 8649

1樓:雲林之盟

1.問題1的&符號不是地址符號,而是引用。這是c++特有的。

2.問題2當然是限定符,因為輸出的時候是直接輸出time類的hour等成員,如果輸出某一個具體物件的hour,就應該用. 來完成輸出。

2樓:匿名使用者

void set_time(time&); (問題一:為什麼這裡加了一個地址符號)

這裡不是地址符號,這個是引用,表示set_time函式的引數是個time的引用。

問題二:為什麼time::hour用的是::

而不是. 我先給你解釋一下::這個是作用域限定符,這樣寫是說hour是time類的,.

是物件呼叫才用的。比喻:在main函式中有這樣一句**:

time time;這裡time叫類,time叫物件,是用time類定義了一個time物件,time.hour就是這樣呼叫的。

3樓:匿名使用者

形參中的&,表示引數的引用,就像*表示指標。

引用是實參的別名,引用可以改變實參的內容,這是c++特有的。

time::hour表示是類time的hour,而不是其他的具有hour變數名的變數。::是限定符,用於呼叫類的公有方法、初始化類的靜態變數等。

4樓:veket的小號

語法現象:引用

類的定義看不到 沒法具體分析

在c++ 程式中呼叫被 c編譯器編譯後的函式,為什麼要加 extern 「c」宣告?

5樓:匿名使用者

屬於外部定義的函式,當然要加extern 啊

在link裡面新增lib或者在**里加#prgram<*.lib> 可能拼錯了

這兩個c語言程式設計,為什麼一個呼叫函式需要取地址符號,一個不用 50

6樓:匿名使用者

因為兩個使用的呼叫函式的**並不相同,不同的程式設計方法自然有不同的定義和方法了。

在c++ 程式中呼叫被 c 編譯器編譯後的函式,為什麼要加 extern 「c」宣告? 20

7樓:匿名使用者

首先,作為extern是c/c++語言中表明函式和全域性變數作用範圍(可見性)的關鍵字,

該關鍵字告訴編譯器,其宣告的函式和變數可以在本模組或其它模組中使用。

通常,在模組的標頭檔案中對本模組提供給其它模組引用的函式和全域性變數以關鍵字extern宣告。

例如,如果模組b欲引用該模組a中定義的全域性變數和函式時只需包含模組a的標頭檔案即可。

這樣,模組b中呼叫模組a中的函式時,在編譯階段,模組b雖然找不到該函式,但是並不會報錯;

它會在連線階段中從模組a編譯生成的目標**中找到此函式

extern "c"是連線申明(linkage declaration),

被extern "c"修飾的變數和函式是按照c語言方式編譯和連線的,

來看看c++中對類似c的函式是怎樣編譯的:

作為一種物件導向的語言,c++支援函式過載,而過程式語言c則不支援。

函式被c++編譯後在符號庫中的名字與c語言的不同。

例如,假設某個函式的原型為:

void foo( int x, int y );

該函式被c編譯器編譯後在符號庫中的名字為_foo,

而c++編譯器則會產生像_foo_int_int之類的名字

(不同的編譯器可能生成的名字不同,

但是都採用了相同的機制,生成的新名字稱為「mangled name」)。

_foo_int_int這樣的名字包含了函式名、函式引數數量及型別資訊,

c++就是靠這種機制來實現函式過載的。

例如,在c++中,函式void foo( int x, int y )與void foo( int x,float y )

編譯生成的符號是不相同的,後者為_foo_int_float。

同樣地,c++中的變數除支援區域性變數外,還支援類成員變數和全域性變數。

使用者所編寫程式的類成員變數可能與全域性變數同名,我們以"."來區分。

而本質上,編譯器在進行編譯時,與函式的處理相似,

也為類中的變數取了一個獨一無二的名字,

這個名字與使用者程式中同名的全域性變數名字不同。

本內容,引用自,裡面有更詳細的說明:

請問c++中的引用符號「&」到底怎麼使用?

8樓:苑

c++中的引用符號「&」的使用方法是,型別識別符號 &引用名=目標變數名。

c++是c語言的繼承,它可進行過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。引用(reference)就是c++對c語言的重要擴充。引用就是某一變數(目標)的一個別名,對引用的操作與對變數直接操作完全一樣。

9樓:西西哩的小馬甲

引用就是某一變數(目標)的一個別名,對引用的操作與對變數直接操作完全一樣。

引用的宣告方法:型別識別符號 &引用名=目標變數名;

【例1】:int a; int &ra=a; //定義引用ra,它是變數a的引用,即別名 ;

說明:(1)&在此不是求地址運算,而是起標識作用。

(2)型別識別符號是指目標變數的型別。

(3)宣告引用時,必須同時對其進行初始化。

(4)引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變數名的別名。 ra=1; 等價於 a=1;

(5)宣告一個引用,不是新定義了一個變數,它只表示該引用名是目標變數名的一個別名,它本身不是一種資料型別,因此引用本身不佔儲存單元,系統也不給引用分配儲存單元。

故:對引用求地址,就是對目標變數求地址。&ra與&a相等。

(6)不能建立陣列的引用。因為陣列是一個由若干個元素所組成的集合,所以無法建立一個陣列的別名。

10樓:匿名使用者

引用是c++引入的新語言特性,是c++常用的一個重要內容之一,正確、靈活地使用引用,可以使程式簡潔、高效。

引用簡介

引用就是某一變數(目標)的一個別名,對引用的操作與對變數直接操作完全一樣。

引用的宣告方法:型別識別符號 &引用名=目標變數名;

【例1】:int a; int &ra=a; //定義引用ra,它是變數a的引用,即別名

說明:(1)&在此不是求地址運算,而是起標識作用。

(2)型別識別符號是指目標變數的型別。

(3)宣告引用時,必須同時對其進行初始化。

(4)引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變數名的別名。

ra=1; 等價於 a=1;

(5)宣告一個引用,不是新定義了一個變數,它只表示該引用名是目標變數名的一個別名,它本身不是一種資料型別,因此引用本身不佔儲存單元,系統也不給引用分配儲存單元。故:對引用求地址,就是對目標變數求地址。

&ra與&a相等。

(6)不能建立陣列的引用。因為陣列是一個由若干個元素所組成的集合,所以無法建立一個陣列的別名。

引用應用

1、引用作為引數

引用的一個重要作用就是作為函式的引數。以前的c語言中函式引數傳遞是值傳遞,如果有大塊資料作為引數傳遞的時候,採用的方案往往是指標,因為這樣可以避免將整塊資料全部壓棧,可以提高程式的效率。但是現在(c++中)又增加了一種同樣有效率的選擇(在某些特殊情況下又是必須的選擇),就是引用。

【例2】:

此處函式的形參p1, p2都是引用

為在程式中呼叫該函式,則相應的主調函式的呼叫點處,直接以變數作為實參進行呼叫即可,而不需要實參變數有任何的特殊要求。如:對應上面定義的swap函式,相應的主調函式可寫為:

main( )

float &fn2(float r) //定義函式fn2,它以引用方式返回函式值

void main() //主函式

} (5)在另外的一些操作符中,卻千萬不能返回引用:+-*/ 四則運算子。它們不能返回引用,effective c++[1]的item23詳細的討論了這個問題。

主要原因是這四個操作符沒有side effect,因此,它們必須構造一個物件作為返回值,可選的方案包括:返回一個物件、返回一個區域性變數的引用,返回一個new分配的物件的引用、返回一個靜態物件引用。根據前面提到的引用作為返回值的三個規則,第2、3兩個方案都被否決了。

靜態物件的引用又因為((a+b) == (c+d))會永遠為true而導致錯誤。所以可選的只剩下返回一個物件了。

4、引用和多型

引用是除指標外另一個可以產生多型效果的手段。這意味著,一個基類的引用可以指向它的派生類例項。

【例7】:

class a;

class b:public a;

b b;

a &ref = b; // 用派生類物件初始化基類物件的引用

ref 只能用來訪問派生類物件中從基類繼承下來的成員,是基類引用指向派生類。如果a類中定義有虛擬函式,並且在b類中重寫了這個虛擬函式,就可以通過ref產生多型效果。

引用總結

(1)在引用的使用中,單純給某個變數取個別名是毫無意義的,引用的目的主要用於在函式引數傳遞中,解決大塊資料或物件的傳遞效率和空間不如意的問題。

(2)用引用傳遞函式的引數,能保證引數傳遞中不產生副本,提高傳遞的效率,且通過const的使用,保證了引用傳遞的安全性。

(3)引用與指標的區別是,指標通過某個指標變數指向一個物件後,對它所指向的變數間接操作。程式中使用指標,程式的可讀性差;而引用本身就是目標變數的別名,對引用的操作就是對目標變數的操作。

(4)使用引用的時機。流操作符《和》、賦值操作符=的返回值、拷貝建構函式的引數、賦值操作符=的引數、其它情況都推薦使用引用。

11樓:匿名使用者

int x=5;

int &p=x; // p指向了x用於函式的傳址引數, int test(int &m, int n)

m是傳址,n是傳值

12樓:匿名使用者

取地址符,比如有個變數a。&a就是說a在記憶體的地址

c++在函式宣告時,後面跟個const是什麼意思?

13樓:幻翼高達

c++在函式宣告時,後面跟個const是限定函式型別為常成員函式, 常成員函式是指不能改變成員變數值的函式。

例如「double d() const;」,其中的其中的「const」限定了d()函式中不能有任何改變其所屬物件成員變數值的功能,如果有則會在編譯階段就報錯。

它的主要作用就是能使成員函式的意義更加清楚,我們可在不改變物件的成員函式的函式原型中加上const說明。在需要增加可讀性和減少邏輯出錯的情況下,就可以用這種形式。

我們定義的類的成員函式中,常常有一些成員函式不改變類的資料成員,也就是說,這些函式是"只讀"函式,而有一些函式要修改類資料成員的值。如果把不改變資料成員的函式都加上const關鍵字進行標識,顯然,可提高程式的可讀性。

另外,它還能提高程式的可靠性,已定義成const的成員函式,一旦企圖修改資料成員的值,則編譯器按錯誤處理。

請問為什麼c語言後面要加return

這個指的是返回 0 代表著程式的終結,一般在主函式裡作用不明顯,c語言為什麼要加return 0 return 0 表示程式正常結束。return 非0 表示程式異常結束 這是c標準對編譯器的一項建議。return表示中止當前函式的執行,並將操作權返回給呼叫者。如果是在main函式中,表示將操作權返...

積分符號後面為什麼要加DX,這有什麼特殊意義嗎?沒有還加什麼

很簡單的問題,你學積分前是否先學了微分?微分是把一個變數無限細分的意思。那積分是幹什麼的,就是把你剛才這無限細分的變數比如dx求一下和。積分符號s就是summary即總結求和的英文首字母s拉長後的樣子。這樣積分那個式子是不是很好理解,s 求和 求什麼呢?就是對多少倍的dx求和,再加上一個上下求和區間...

已知概率密度求分佈函式為什麼要加

由 來df x dx f x f x 為分佈自 函式,f x 為概率密度bai函式。若 duf x e zhi x x 0 f x 0,x 0 f x x,0 f x dx x,0 e x dx e x x,0 e x 1 1 e x 分佈函式的 dao性質1.f 0 0,2.f 1 e 1 0 1...