成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

C 中形參類型詳解與實例分析

緒論在C 編程中,函數(shù)的形參可以分為非引用形參和引用形參,其中非引用形參包括非const形參和const形參。非const形參以實參的副本初始化,不會修改實參的值;而引用形參直接訪問實參對象并可以

緒論

在C 編程中,函數(shù)的形參可以分為非引用形參和引用形參,其中非引用形參包括非const形參和const形參。非const形參以實參的副本初始化,不會修改實參的值;而引用形參直接訪問實參對象并可以改變實參內(nèi)容。通過使用const限定符,可以對這兩種形參進行更精確的控制。

非const非引用形參

對于普通的函數(shù)形參來說,以實參副本初始化形參將改變實參的值。然而,在非const非引用形參中,無論實參是否添加const關(guān)鍵字,結(jié)果都是一樣的。這是因為非const非引用形參本身不會改變實參的值。

```cpp

include

include

using namespace std;

int use_ptr1(int val) {

return val;

}

int main() {

int v1 1;

cout << "v1初值: " << v1 << endl;

use_ptr1(v1);

cout << "v1加1操作后: " << v1 << endl;

const int v2 2;

cout << "v2初值: " << v2 << endl;

use_ptr1(v2);

cout << "v2加1操作后: " << v2 << endl;

getchar();

return 0;

}

```

const非引用形參

在const非引用形參中,防止修改從實參傳遞的形參值,因此只能使用形參而不能修改形參。和非const非引用形參類似,對于實參添加const與否結(jié)果相同。

```cpp

include

include

using namespace std;

int use_ptr2(const int val) {

return val;

}

int main() {

int v1 1;

use_ptr2(v1);

cout << "v1: " << v1 << endl;

const int v2 2;

use_ptr2(v2);

cout << "v2: " << v2 << endl;

getchar();

return 0;

}

```

非const引用形參

非const引用形參直接關(guān)聯(lián)到綁定對象,對形參的修改就是對實參的修改。通常在需要在函數(shù)中修改實參值或以大型對象作為實參傳遞時會使用非const引用形參。

```cpp

include

include

using namespace std;

int use_ptr5(int val) {

return val;

}

int main() {

int v1 1;

int *p1 v1;

use_ptr5(v1);

cout << "v1: " << v1 << endl;

getchar();

return 0;

}

```

const引用形參

const引用形參可以由非const或const實參初始化,也可以傳遞右值或需要類型轉(zhuǎn)換的對象,但是不可修改其值。實參添加const與否對結(jié)果沒有影響。

```cpp

include

include

using namespace std;

int use_ptr6(const int val) {

return val;

}

int main() {

int v1 1;

int v2 2;

use_ptr6(v1);

use_ptr6(v2);

getchar();

return 0;

}

```

總結(jié)

- 非const非引用形參和const非引用形參均可由const或非const實參初始化;

- 非const引用形參沒有const限定符,實參必須是非const類型;

- const引用形參可由const或非const實參初始化;

- 非const引用形參在使用上不夠靈活,通常建議少用非const引用形參,多用const引用形參。

程序?qū)嵗?/p>

以下為一個完整的程序示例,展示不同類型的形參的使用和限制。

```cpp

include

include

using namespace std;

int use_ptr1(int val) {

return val;

}

int use_ptr2(const int val) {

return val;

}

void ptrswap1(int *s1, int *s2) {

int *temp s2;

s2 s1;

s1 temp;

}

void ptrswap2(const int *s1, const int *s2) {

const int *temp s2;

s2 s1;

s1 temp;

}

int main() {

int v1 1, v2 2;

int *p1 v1;

int *p2 v2;

ptrswap1(p1, p2);

cout << *p1 << " " << *p2 << endl;

const int *p3 v1;

const int *p4 v2;

// ptrswap2(p3, p4); // Error: 不能傳入指向const對象的指針

cout << *p1 << " " << *p2 << endl;

system("pause");

return 0;

}

```

通過以上的文章內(nèi)容和代碼示例,我們可以更好地理解C 中各種形參類型的差異和應(yīng)用場景。

標(biāo)簽: