日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++编程基础二 03-const形参与实参

發布時間:2024/1/17 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++编程基础二 03-const形参与实参 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 // C++函數和類 03-const形參與實參.cpp: 定義控制臺應用程序的入口點。 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 #include <string> 7 #include <array> 8 #include <climits> 9 #include <math.h> 10 using namespace std; 11 12 int cube1(int i); 13 int cube2(const int i); 14 int pCube1(int *pi); 15 int pCube2(const int *pi); 16 int pCube3(int *const pi); 17 int rCube1(int &r); 18 int rCube2(const int &r); 19 int main() 20 { 21 22 //一般變量來說,其實沒有頂層const和底層const的區別,而只有向指針這類復合類型的基本變量,才有這樣的區別。 23 //如何區分頂層const和底層const? 24 //1.指向常量的指針(底層const):代表不能改變其指向內容的指針。聲明時const可以放在類名前后都可以。 25 // 例如: 26 //int num_a = 1; 27 //int const *p_a = &num_a; //底層const 28 //*p_a=2; //錯誤,如果需要改變num_a的值,不能通過*pa來改變,只能num_a來改變值。 29 //2.指針常量(頂層const):代表指針本身是常量,聲明時必須初始化。之后它儲存的地址就不能再改變。聲明時const必須放在*符號后面,即:*const。 30 // 例如: 31 //int num_b = 2; 32 //int *const p_b = &num_b; //頂層const 33 //p_b = &num_a; //錯誤,常量指針不能改變儲存的地址值。 34 //一個指針本身添加const限定符就是頂層const,而指針所指的對象添加const限定符就是底層const。 35 36 // 例子1:執行對象拷貝時有限制,常量的底層const不能賦值給非常量的底層const。 37 int num_c = 3; 38 const int *p_c = &num_c; //p_c為底層const的指針 39 //int *p_d = p_c; //錯誤,不能將底層const指針復制給非底層const指針。 40 const int *p_d = p_c; //正確,可以將底層const指針復制給底層const指針。 41 42 //例子2:使用命名強制類型轉換函數const_cast時,需要能夠分辨底層const和頂層const,因為const_cast只能改變運算對象的底層const。 43 int num_e = 4; 44 const int *p_e = &num_e; 45 // *p_e = 5; //錯誤,不能改變底層const指針指向的內容。 46 int *p_f = const_cast<int *>(p_e);//正確,const_cast可以改變運算對象的底層const。但是使用時,一定要知道num_e不是const的類型。 47 *p_f = 5; //正確,非頂層const指針可以改變指向的內容 48 cout << num_e; //輸出5 49 50 //練習: 51 const int a = 1; 52 //int * pi = &a; //錯誤,&a是底層const是底層const,不能賦值給非底層const 53 const int *pi = &a; //正確,&a是底層const,可以賦值給底層const 54 const int *const*const ppi = &pi; //即是底層const,也是頂層const 55 const int *const*const*pppi = &ppi; //底層const 56 57 58 //_______________________________參考__________________________________________________ 59 60 61 int num1 = 10; 62 const int num2 = 10; 63 num1 = 20; //為int類型的變量,可以修改它的值 64 //num2 = 20; //int類型的常量,不可以修改它的值 65 66 int *p1 = &num1; //普通指針,int類型的變量可以初始化。也可以通過*p1修改int類型值。 67 // int *p2 = &num2;//出錯 int類型的常量不可以初始化, 不能修改常量的值。 68 69 //在這里const包含兩層含義: 70 const int *p3 = &num1; //底層const,int類型的變量和常量都可以初始化,但是不能通過*p3,*p4,去修改num1,num2的值。 71 const int *p4 = &num2; // 72 73 int *const p5 = &num1; //頂層const,int類型的變量可以初始化。 74 // int *const p6 = &num2; //出錯 int類型的常量不可以初始化。 75 76 //int類型的引用,可以通過r1區修改num1的值,所以只能用int類型去初始化,不能用const int類型 77 int &r1 = num1; 78 // int &r2 = num2; //出錯 79 // const int 類型的引用,不能修r3,r4的值 80 // 可以使用int類型的數據來初始化,也可以使用const int類型 81 const int &r3 = num1; 82 const int &r4= num2; 83 84 //實參為int類型或const int 類型 85 cout << cube1(num1) << " "<<cube1(num2) << endl; 86 cout << cube2(num1) << " " << cube2(num2) << endl; 87 88 //實參只能為int類型 89 cout << pCube1(&num1) << endl; 90 // cout << pCube1(&num2) << endl; //出錯 91 92 // 所以實參是int類型,也可以是const int類型 93 cout << pCube2(&num1) << " " << pCube2(&num2) << endl; 94 95 //所以實參類型只能是int類型。 96 cout << pCube3(&num1) << endl; 97 // cout << pCube3(&num2) << endl; //出錯 98 99 // 實參只能是int類型 100 cout << rCube1(num1) << endl; 101 // cout << rCube1(num2) << endl; //出錯 102 103 // 實參的類型可以是int類型,也可以是const int 類型 104 cout << rCube2(num1) << " " << rCube2(num2) << endl; 105 return 0; 106 107 } 108 109 110 //可以修改形參: 111 int cube1(int i) 112 { 113 //i = 0; //錯誤的: 114 return i * i*i; 115 } 116 //不可以修改形參i 117 int cube2(const int i) 118 { 119 //i=0; //出錯 120 return i * i*i; 121 } 122 int pCube1(int *pi) 123 { 124 *pi = 0; 125 return *pi*(*pi)*(*pi); 126 } 127 128 //可以修改pi,但是不可以修改*pi.所以實參是int類型,也可以是const int類型 129 int pCube2(const int *pi) 130 { 131 //*pi = 0; //錯誤 132 return *pi*(*pi)*(*pi); 133 } 134 //不可以修改pi,但是可以修改*pi,所以實參類型只能是int類型。 135 int pCube3(int *const pi) 136 { 137 *pi = 0; 138 return *pi*(*pi)*(*pi); 139 } 140 //可以修改r,實參只能是int類型 141 int rCube1(int &r) 142 { 143 //r = r * r*r; 144 return r * r*r; 145 } 146 //不可以修改r,實參的類型可以是int類型,也可以是const int 類型 147 int rCube2(const int &r) 148 { 149 //r = r * r*r; //出錯 150 return r * r*r; 151 } 152 153 //總結: 154 //1.int cube(int i); 實參可以為int類型,也可以為const int類型。在函數體中可以修改i的值, 155 //函數不會修改實參的值。 156 //2.int cube(const int i); 實參可以為int類型,也可以為const int類型。在函數體中不可以修改i的值, 157 //函數不會修改實參的值。 158 //3.int pCube(int *pi); 實參為int* 類型的指針,不能為const int*類型。可以通過修改*pi的值修改實參指向的對象的值, 159 //修改pi對實參沒有影響。 160 //4.int pCube(const int *pi);實參可以為const int*類型,也可以為int*類型。不可以通過修改*pi的值修改實參指向的對象的值, 161 //修改pi對實參沒有影響。 162 //5.int pCube(int *const pi);實參為int*類型,不能為const int*類型。可以通過修改*pi的值修改實參指向的對象的值,不可以給pi賦值。 163 //6.void prest(int &r);實參為int類型,不可以為const int 類型。可以通過修改r的值,從而修改實參的值。 164 //7.void print(const int &r);實參可以為int類型,也可以為const int類型,不可以修改r的值。

?

轉載于:https://www.cnblogs.com/uimodel/p/9348518.html

總結

以上是生活随笔為你收集整理的C++编程基础二 03-const形参与实参的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。