一、初識C++黑馬C++學(xué)習(xí)總結(jié),參考博客:黑馬程序員 C++ 基礎(chǔ)語法入門 學(xué)習(xí)記錄
建議有基礎(chǔ)的同學(xué)直接看博客進行學(xué)習(xí),遇到不太懂的地方再去看視頻加深理解
system("pause");
用來暫停程序進程define 變量名 常量值
通常在文件上方定義,不占內(nèi)存空間const 數(shù)據(jù)類型 常量名 = 常量值
通常在變量定義前加關(guān)鍵字const,修飾該變量為常量,占內(nèi)存空間C++規(guī)定在創(chuàng)建一個變量或者常量時,必須要指定出相應(yīng)的數(shù)據(jù)類型,否則無法給其分配內(nèi)存
數(shù)據(jù)類型 | 占用空間 | 取值范圍 |
---|---|---|
short(短整型) | 2字節(jié) | ? 2 15 -2^{15} ?215 ~ 2 15 ? 1 2^{15}-1 215?1 |
int(整型) | 4字節(jié) | ? 2 31 -2^{31} ?231 ~ 2 31 ? 1 2^{31}-1 231?1 |
long(長整型) | Windows為4字節(jié),32位Linux為4字節(jié),64位Linux位8字節(jié) | ? 2 31 -2^{31} ?231 ~ 2 31 ? 1 2^{31}-1 231?1 |
long long(長長整型) | 8字節(jié) | ? 2 63 -2^{63} ?263 ~ 2 63 ? 1 2^{63}-1 263?1 |
計算機使用二進制計數(shù)來記錄信息,1字節(jié)=8字(1B=8bit)。比如int類型,4個字節(jié)占32個字,第一位用來表示符號位,其余的31位用來表示數(shù)值。因為0既不是正數(shù)也不是負數(shù),它占用了0000(十六進制0)的位置,因此正數(shù)個數(shù)比負數(shù)少一個,才多了-1。
取值越界就好比十進制運算,給計算機分配了一個字,現(xiàn)在1+9需要進位,但因為只有一個字,所以1+9=0。ex:
short num = 32768;
cout<< num<< endl; // 輸出的是-32768
計算機二進制運算中,負數(shù)由補碼形式表示。正數(shù)的原碼、反碼、補碼都是本身,負數(shù)的補碼是反碼+1。
[+1] = [00000001]原= [00000001]反= [00000001]補
[-1] = [10000001]原= [11111110]反= [11111111]補
最小的負整數(shù) -32768,計算機中二進制標示:10000000 00000000
最小負整數(shù)-32768加1之后,在計算機中的表示就是:10000000 00000001,對應(yīng)的值就是 -215-1),即-32767。然后一直加1,直到11111111 11111111,對應(yīng)的值就是-1,再加1,就變成了1 00000000 00000000,即17位,而short類型只讀取16位,所以-1+1=0。00000000 00000000一直加1,加到01111111 11111111,就變成了short類型的大整數(shù)32767。再加1,就變成了10000000 00000000,即最小負數(shù):-32768。
小結(jié):正數(shù)大值加1后產(chǎn)生越界,第一位符號位由原來符號類型轉(zhuǎn)變?yōu)榱硪活愋?,此時若正數(shù)轉(zhuǎn)換為負數(shù),負數(shù)數(shù)值將以補碼形式表示。
int num = 1;
cout<< sizeof(num)<< endl; // 4字節(jié)
cout<< sizeof(long)<< endl; // 4字節(jié)
兩者的區(qū)別在于表示的有效數(shù)字范圍不同。有效數(shù)字包括整數(shù)和小數(shù)部分。
數(shù)據(jù)類型 | 占用空間 | 有效數(shù)字范圍 |
---|---|---|
float | 4字節(jié) | 7位有效數(shù)字 |
double | 8字節(jié) | 15~16位有效數(shù) |
為什么float是7位呢?因為4字節(jié)=32位。1位符號位,8位指數(shù)位,23位尾數(shù)位。 2 23 2^{23} 223=8388608,一共七位。符號位0表示正數(shù),1表示負數(shù)。符號位之后的指數(shù)位,決定了數(shù)字的范圍。指數(shù)位之后的尾數(shù)位,決定了數(shù)字的精度(即保留幾位數(shù)或有效數(shù)字)
數(shù)據(jù)類型 | 符號位 | 指數(shù)位 | 尾數(shù)位 |
---|---|---|---|
float | 第31位(占1bit) | 第30-23位(占8bit) | 第22-0位(占23bit) |
double | 第63位(占1bit) | 第62-52位(占11bit) | 第51-0位(占52bit) |
以double為例,雙精度浮點型的數(shù)轉(zhuǎn)化為二進制的數(shù)保存,讀取時根據(jù)指數(shù)位和尾數(shù)位的值轉(zhuǎn)化成雙精度浮點數(shù)。
比如說存儲8.8125這個數(shù),它的整數(shù)部分的二進制是1000,小數(shù)部分的二進制是1101.這兩部分連起來是1000.1101,但是存儲到內(nèi)存中小數(shù)點會消失,因為計算機只能存儲0和1。
1000.1101這個二進制數(shù)用科學(xué)計數(shù)法表示是1.0001101 *
2
3
2^{3}
23,這里的3(0011)即為指數(shù)
現(xiàn)在符號位是0,尾數(shù)位就是科學(xué)計數(shù)法小數(shù)部分的0001101。指數(shù)位用來存儲科學(xué)計數(shù)法的指數(shù),此處為3。指數(shù)位有正負,11位指數(shù)位表示的指數(shù)范圍是-1023 ~ 1024
可以判斷數(shù)值的大值為53位二進制的大值:
2
53
2^{53}
253 - 1
ps: 科學(xué)計數(shù)法中小數(shù)點前的1可以省略,因為這一位永遠是1。0.5的二進制科學(xué)計數(shù)為1.00 *
2
?
1
2^{-1}
2?1
兩個浮點數(shù)相加可能會產(chǎn)生誤差。比如比如 0.1 + 0.2 的結(jié)果是 0.30000000000000004
這是因為 0.1 和 0.2 用二進制表示時為 0.0001 1001 1001 1001…(1100循環(huán)) 和 0.0011 0011 0011 0011…(0011循環(huán))。如果截取于第 52 位,就會得到一個有誤差的結(jié)果。ex:
int main()
{//默認情況下,輸出一個小數(shù),會顯示6位有效數(shù)字
float f1 = 3.1415926f; //不加f默認是double類型。刪掉f,鼠標放在3.14可以查看類型
double d1 = 3.1415926;
cout<< "f1="<< f1<< endl;
cout<< "d1="<< d1<< endl;
//統(tǒng)計float和double占用內(nèi)存空間
cout<< "float所占內(nèi)存空間為:"<< sizeof(f1)<< "字節(jié)"<< endl;
cout<< "double所占內(nèi)存空間為:"<< sizeof(d1)<< "字節(jié)"<< endl;
//科學(xué)計數(shù)法
float f2 = 3e2; //3*10^2
float f3 = 3e-2; //3*10^-2
cout<< "f2="<< f2<< endl;
cout<< "f3="<< f3<< endl;
system("pause");
return 0;
}
// 輸出
f1=3.14159
d1=3.14159
float所占內(nèi)存空間為:4字節(jié)
double所占內(nèi)存空間為:8字節(jié)
f2=300
f3=0.03
小結(jié):float變量不加f默認是double類型。
字符型:在顯示字符型變量時,用單引號將字符括起來,不要用雙引號。單引號內(nèi)只能有一個字符,不可以是字符串。
轉(zhuǎn)義字符作用:用于表示一些不能顯示出來的ASCII字符
int main()
{//反斜杠 錯誤,cout<< "\"<< endl;
cout<< "\\"<< endl;
//水平制表符 \t占八個字符,包括\t之前的字符個數(shù) 優(yōu)點是數(shù)據(jù)輸出整齊
cout<< "123\tHelloWorld"<< endl;
cout<< "12345\tHelloWorld"<< endl;
//換行符 兩個效果相同
cout<< "Hello\n" ;
cout<< "Hello"<< endl;
system("pause");
return 0;
}
// 輸出
\
123 HelloWorld
12345 HelloWorld
Hello
Hello
// 1.C語言風(fēng)格字符串 char 字符串名[] = "xx"
//注意:等號后面要用雙引號 包含起來字符串
char str[] = "Hello World";
// 2.C++風(fēng)格字符串 用C++風(fēng)格字符串時,要包含“#include”頭文件(但std命名空間包含std::string)
string str2 = "Hello World";
cin
語法:cin >>變量
作用:用于執(zhí)行代碼的運算
主要分為以下四類:算術(shù)運算符、賦值運算符、比較運算符、邏輯運算符
C/C++支持最基本的三種程序運行結(jié)構(gòu):
if語句:執(zhí)行滿足條件的語句
#includeusing namespace std;
// 判斷三個人體重
int main()
{int w1, w2, w3;
cout<< "A weight:"<< endl;
cin >>w1;
cout<< "B weight:"<< endl;
cin >>w2;
cout<< "C weight:"<< endl;
cin >>w3;
if (w1 >w2) {if (w1 >w3)
cout<< "A最重"<< endl;
else
cout<< "C最重"<< endl;
}
else
{if (w2 >w3)
cout<< "B最重"<< endl;
else
cout<< "C最重"<< endl;
}
system("pause");
return 0;
}
三目運算符:通過三目運算符實現(xiàn)簡單的判斷
語法:表達式1 ?表達式2 :表達式3
c = (a >b ? a : b);
(a >b ? a : b) = 100; // C++中的三目運算符返回的是變量,可以繼續(xù)賦值
#includeusing namespace std;
int main()
{//1.提示用戶給電影評分
cout<< "請給電影打分"<< endl;
//2.用戶開始進行打分
int score;
cin >>score;
cout<< "您打的分數(shù)為:"<< score<< endl;
//3.根據(jù)用戶輸入的分數(shù)來提示用戶最后的結(jié)果
switch (score)
{case(10):
case(9):
cout<< "您認為是經(jīng)典電影"<< endl;
case(8):
case(7):
cout<< "您認為電影非常好"<< endl;
case(6):
case(5):
cout<< "您認為電影一般"<< endl;
break;
default:
cout<< "您認為電影是爛片"<< endl;
break;
}
system("pause");
return 0;
}
輸出
請給電影打分
10
您打的分數(shù)為:10
您認為是經(jīng)典電影
您認為電影非常好
您認為電影一般
請按任意鍵繼續(xù). . .
循環(huán)結(jié)構(gòu)小結(jié):
switch缺點:判斷時候只能是整型或者字符型,不可以是一個區(qū)間
switch優(yōu)點:結(jié)構(gòu)清晰,執(zhí)行效率高
注意break:case里如果沒有break那么程序會一直執(zhí)行,執(zhí)行break則會跳出switch
#includeusing namespace std;
int main()
{// 添加隨機數(shù)種子配合rand,利用當前系統(tǒng)時間生成隨機數(shù),防止每次隨機數(shù)都一樣
srand((unsigned int)time(NULL));
// 1. 系統(tǒng)生成隨機數(shù)
int num = rand() % 100 + 1; // 生成100個隨機數(shù),區(qū)間為0+1~99+1
int guess;
cout<< "游戲開始,猜數(shù)吧"<< endl;
while (1)
{cin >>guess;
if (guess >num)
cout<< "猜大了"<< endl;
else if (guess< num)
cout<< "猜小了"<< endl;
else
{ cout<< "猜對了"<< endl;
break; // while(1)需要用break來退出循環(huán)
}
}
system("pause");
return 0;
}
int main()
{//1.先打印所有三維數(shù)字
int num = 100;
int a, b, c; //代表個位、十位、百位
do
{,.
//2.從所有三位數(shù)字中找到水仙花數(shù)
a = num % 10; //獲取數(shù)字的個位
b = num / 10 % 10; //獲取數(shù)字的十位
c = num / 100; //獲取數(shù)字的百位
if (a*a*a + b * b*b + c * c*c == num) //如果是水仙花數(shù)才打印
cout<< num<< " ";
num++;
} while (num< 1000);
system("pause");
return 0;
}
int main()
{//for循環(huán)
//從數(shù)字0 打印到 數(shù)字9
int i = 0;
for ( ; ; )
{if(i>=10)
break;
cout<< i<< endl;
i++;
}
system("pause");
return 0;
}
for (int i = 0; i< 10; i++)
{for (int j = 0; j< 10; j++)
{cout<< "* ";
}
cout<< '\n';
}
ex:九九乘法表
for (int i = 1; i< 10; i++)
{for (int j = 1; j<= i; j++)
{cout<< j<< '*'<< i<< '*'<< j * i<< '\t';
}
cout<< '\n';
}
跳轉(zhuǎn)語句ex:
#includeusing namespace std;
int main()
{cout<< "請選擇副本難度"<< endl;
cout<< "1.簡單"<< "\t"<< "2.普通"<< "\t"<< "3.困難"<< endl;
int select;
cin >>select;
switch (select)
{case 1:
cout<< "進入簡單模式"<< endl;
break;
case 2:
cout<< "進入普通模式"<< endl;
break;
default:
cout<< "進入困難模式"<< endl;
break;
}
system("pause");
return 0;
}
int main()
{//continue語句
for (int i = 0; i<= 100; i++) // 注意這里只有一層循環(huán),所以break會直接退出
{//如果是奇數(shù)輸出,偶數(shù)不輸出
if (i % 2 == 0)
{ continue; //可以篩選條件,執(zhí)行到此就不再向下執(zhí)行,執(zhí)行下一次循環(huán)
//break會退出循環(huán),而continue不會
}
cout<< i<< " ";
}
system("pause");
return 0;
}
int main()
{cout<< "1.xxx"<< endl;
goto Flag;
cout<< "2.xxx"<< endl;
Flag:
cout<< "4.xxx"<< endl;
system("pause");
return 0;
}
輸出
1.xxx
4.xxx
注意:在程序中不建議使用goto語句,以免造成程序混亂!
五、數(shù)組數(shù)組其實就是一個集合,里面存放了相同類型的數(shù)據(jù)元素
特點1:數(shù)組中的每個數(shù)據(jù)元素都是相同的數(shù)據(jù)類型
特點2:數(shù)組是由連續(xù)的內(nèi)存位置組成的
int main()
{//數(shù)組命名規(guī)范與變量名命名規(guī)范一致,不要和變量重名
//1. 數(shù)組類型 數(shù)組名[ 數(shù)組長度 ];
int arr[1];
arr[0] = 50; // 數(shù)組中下標是從0開始索引
//訪問數(shù)組元素
cout<< arr[0]<< endl;
//2.數(shù)據(jù)類型 數(shù)組名[ 數(shù)組長度 ] = { 值1,值2... };
//如果在初始化數(shù)據(jù)的時候,沒有全部填寫完,會用0來填補剩余數(shù)據(jù)
int arr2[5] = {10,20,30,40 };
for (int i = 0; i< 5; i++)
{cout<< arr2[i]<< " "; // 正常輸出前四個值,最后一個為0
}
cout<< endl;
//3.數(shù)據(jù)類型 數(shù)組名[ ] = { 值1,值2... };
//定義數(shù)組的時候,必須有初始長度,或?qū)ζ渲辽儋x一個值
int arr3[] = {10,20,30,40 };
for (int i = 0; i< 5; i++)
{cout<< arr3[i]<< " "; // 正常輸出前四個值,最后一個為隨機值
}
}
ex:
int main()
{//數(shù)組名用途
//1.可以通過數(shù)組名統(tǒng)計整個數(shù)組占用內(nèi)存大小
int arr[10] = {1,2,3,4,5,6,7,8,9,10 };
cout<< "整個數(shù)組占用內(nèi)存空間為:"<< sizeof(arr)<< endl;
cout<< "每個元素占用內(nèi)存空間:"<< sizeof(arr[0])<< endl;
cout<< "數(shù)組中元素的個數(shù)為:"<< sizeof(arr) / sizeof(arr[0])<< endl; // 求數(shù)組中的元素個數(shù)方法,會經(jīng)常用到
//2.可以通過數(shù)組名查看數(shù)組首地址
cout<< "數(shù)組首地址(十六進制)"<< arr<< endl;
cout<< "數(shù)組首地址(十進制)"<< (int)arr<< endl;
cout<< "數(shù)組中第一個元素地址為:"<< (int)&arr[0]<< endl;
cout<< "數(shù)組中第二個元素地址為:"<< (int)&arr[1]<< endl;
//數(shù)組名是常量,不可以進行賦值操作
//arr=100;
}
輸出
整個數(shù)組占用內(nèi)存空間為:40
每個元素占用內(nèi)存空間:4
數(shù)組中元素的個數(shù)為:10
數(shù)組首地址(十六進制)0000003AF32FF5D8
數(shù)組首地址(十進制)-214960680
數(shù)組中第一個元素地址為:-214960680
數(shù)組中第二個元素地址為:-214960676
ex1:找出數(shù)組中大值
max = max >arr[i] ? max : arr[i]
ex2:數(shù)組元素逆置
int tmp = arr[start];
arr[start] = arr[end]; // 結(jié)束下標可以用sizeof(arr) / sizeof(arr[0])-1獲得
arr[end] = tmp;
start ++;
end --;
int main()
{// 冒泡排序
int arr[9] = {3, 4, 5, 1, 2, 63, 23, 21, 0 };
int n = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i< n - 1; i++)
{int tmp = 0;
for (int j = 0; j< n - i - 1; j++)
{ if (arr[j] >arr[j + 1])
{ tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
for (int i = 0; i< n; i++)
{cout<< arr[i]<< " ";
}
system("pause");
return 0;
}
int main()
{int arr[][3] = {1, 2, 3, 4, 5, 6 };
for (int i = 0; i< 2; i++)
{for (int j = 0; j< 7; j++) // 超出原定行數(shù)或列數(shù)的位置,如果數(shù)組元素足夠可以補全,否則會輸出隨機值
{ cout<< arr[i][j]<< " ";
}
cout<< endl;
}
system("pause");
return 0;
}
輸出
1 2 3 4 5 6 -858993460
4 5 6 -858993460 -858993460 -858993460 -858993460
sizeof(arr) // 求二維數(shù)組占用的內(nèi)存空間
sizeof(arr[0]) // 第一行占用的內(nèi)存
sizeof(arr[0][0]) // 第一個元素占用的內(nèi)存
sizeof(arr) / sizeof(arr[0]) // 行數(shù)
sizeof(arr[0]) / sizeof(arr[0][0]) // 列數(shù)
六、函數(shù)返回值類型 函數(shù)名 (參數(shù)列表)
{函數(shù)體語句
return 表達式;
}
如果把函數(shù)寫在main函數(shù)之后,因為程序是按順序執(zhí)行的,所以找不到函數(shù)定義。可以用函數(shù)聲明來解決
作用:告訴編譯器函數(shù)名稱及如何調(diào)用函數(shù)。函數(shù)的實際主體可以單獨定義
函數(shù)的聲明可以多次,但是函數(shù)的定義只能有一次
ex:
// 聲明
int max(int a, int b);
int main()
{int a = 10;
int b = 20;
cout<< max(a, b)<< endl;
return 0;
}
// 定義
int max(int a, int b)
{return a >b ? a : b;
}
ex:
新建swap.h頭文件
#includeusing namespace std;
// 函數(shù)聲明
void swap(int a, int b);
新建swap.cpp源文件
#include "swap.h"
// 函數(shù)定義
void swap(int a, int b)
{int tmp = a;
a = b;
b = tmp;
cout<< "a ="<< a<< " b ="<< b<< endl;
}
新建函數(shù)的分文件編寫.cpp
#include "swap.h" // 它甚至把這個頭文件里的其他include包含進來了
int main()
{int a = 10;
int b = 20;
swap(a, b);
system("pause");
return 0;
}
七、指針小結(jié):
在頭文件"swap.h",注意添加#include, using namespace std;
在源文件"swap.cpp",注意添加#include “swap.h”,將"swap.cpp"和"swap.h"關(guān)聯(lián)
int a = 10;
int * p; // 定義指針
p = &a; // 記錄變量a的地址
*p = 100; // 使用指針,通過解引用的方式來找到指針指向的內(nèi)存中的數(shù)據(jù)
sizeof(int *) // 輸出8(x64) 輸出4(x86)
sizeof(char *) // 輸出8(x64) 輸出4(x86)
// 1.空指針用于給指針變量進行初始化
int *p = NULL;
// 2.空指針是不可以訪問的
// 0-255之間的內(nèi)存編號是系統(tǒng)占用的,因此不可以訪問
*p = 100;
輸出:
// 指向內(nèi)存被釋放的內(nèi)存或者沒有訪問權(quán)限的內(nèi)存的指針
int *p = (int *)0x1100; // 訪問不到,因為我們沒有申請這塊內(nèi)存
輸出:
小結(jié):空指針和野指針都不是我們申請的空間,因此不要訪問
ex:
// 1.常量指針
// 指針指向的值不可以改,指針的指向可以改
int a = 10;
int b = 10;
const int* p = &a;
*p = 20; // 錯誤
p = &b; // 正確
// 2.指針常量
// 指針的指向不可以改,指針指向的值可以改
int *const p2 = &a;
*p2 = 20; // 正確
p2 = &b; //錯誤
// 3.const同時修飾
// 都不可以改
const int * const p3;
“指針”
,記錄內(nèi)存空間地址int arr[5] = {1, 2, 3, 4, 5};
cout<< arr[0]; // 1
int *p = arr;
cout<< *p; // 1
p ++;
cout<< *p; // 2
#includeusing namespace std;
void swap(int *a, int *b)
{int tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{int a = 10;
int b = 20;
swap(a, b); // or swap(&a, &b)
cout<< "a ="<< a<< " b ="<< b<< endl;
return 0;
}
#includeusing namespace std;
void bubble(int* arr, int len)
{for (int i = 0; i< len - 1; i++)
{for (int j = 0; j< len - i - 1; j++)
{ if (arr[j] >arr[j + 1])
{ int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
void printArray(int *array, int len) // 因為數(shù)組本身就是一個"指針",如果形參不帶*調(diào)用時會報錯 or 寫成int array[]
{for (int i = 0; i< len; i++)
{cout<< array[i]<< " ";
}
}
int main()
{int arr[10] = {4, 3, 2, 5, 1, 2, 6, 8, 9, 8 };
int len = sizeof(arr) / sizeof(arr[0]);
bubble(arr, len);
printArray(arr, len);
return 0;
}
八、結(jié)構(gòu)體結(jié)構(gòu)體屬于用戶自定義的數(shù)據(jù)類型,允許用戶存儲不同的數(shù)據(jù)類型
struct Student
{string name;
int age;
int score;
}s3; // 順便創(chuàng)建的結(jié)構(gòu)體變量
int main()
{// struct關(guān)鍵字可以省略
// 第一種
Student s1;
s1.name = "李四";
cout<< s1.name<< endl;
// 第二種
struct Student s2 = {"張三", 12, 33 };
cout<< s2.score<< endl;
// 第三種
s3.age = 23;
cout<< s3.age<< endl;
return 0;
}
小結(jié):
定義結(jié)構(gòu)體時的關(guān)鍵字是struct
,不可以省略
創(chuàng)建結(jié)構(gòu)體變量時,關(guān)鍵字struct
可以省略
結(jié)構(gòu)體變量利用操作符.
訪問成員
struct 結(jié)構(gòu)體名 數(shù)組名[元素個數(shù)] = {{}, {}, ..., {}}
struct Student
{string name;
int age;
int score;
}s3;
int main()
{Student s1[3] =
{{"張三", 12, 33 },
{"張2", 12, 33 },
{"張1", 12, 33 }
};
s1[2].name = "趙云";
for (int i = 0; i< 3; i++)
{cout<< s1[i].name<< " "<< s1[i].age<< " "<< s1[i].score<< endl;
}
return 0;
}
->
可以通過結(jié)構(gòu)體指針訪問結(jié)構(gòu)體屬性Student s1 = {"張三", 12, 33 };
Student* p = &s1;
cout<< p->name<< endl;
// or
Student s1[3] =
{{"張三", 12, 33 },
{"張2", 12, 33 },
{"張1", 12, 33 }
};
Student* p = s1; // 因為定義的是結(jié)構(gòu)體數(shù)組,相當于指針,所以不需要取地址符
for (int i = 0; i< 3; i++)
{cout<< p->name<< endl;
p++;
}
struct student
{string name;
int age;
int score;
};
struct teacher
{string name;
int age;
int score;
struct student stu;
};
int main()
{teacher t;
t.stu.name = "小李";
}
ex:
struct Student
{string name;
int age;
int score;
}s3;
void printStudent1(Student s)
{s.age = 2;
}
void printStudent2(Student *s)
{s->age = 2;
}
int main()
{Student s = {"張三", 13, 33 };
printStudent1(s);
cout<< s.age<< endl; // 13
printStudent2(&s);
cout<< s.age<< endl; // 2
return 0;
}
const
來防止誤操作// 將函數(shù)中的形參改為指針,可以減少內(nèi)存空間,而且不會復(fù)制新的副本出來
void printStudent2(const Student *s)
{s->age = 2; // 因為形參中加入了const,此處修改會報錯
}
#includeusing namespace std;
struct student
{string sname;
int score;
};
struct teacher
{string tname;
student stuArray[5];
};
void allocateStudent(teacher tArray[], int len)
{// 分配名字
string nameSeed = "ABCDE";
for (int i = 0; i< len; i++)
{tArray[i].tname = "Teacher_";
tArray[i].tname += nameSeed[i];
for (int j = 0; j< 5; j++)
{ tArray[i].stuArray[j].sname = "Student_";
tArray[i].stuArray[j].sname += nameSeed[j];
tArray[i].stuArray[j].score = rand() % 61 + 40;
}
}
}
void printInfo(teacher tArray[], int len)
{for (int i = 0; i< len; i++)
{cout<< "老師姓名:"<< tArray[i].tname<< endl;
for (int j = 0; j< 5; j++)
{ cout<< "學(xué)生姓名:"<< tArray[i].stuArray[j].sname<< " 考試分數(shù):"<< tArray[i].stuArray[j].score<< endl;
}
}
}
int main()
{// 設(shè)置隨機數(shù)種子
srand((unsigned int)time(NULL)); // time函數(shù)必須傳遞參數(shù),但參數(shù)類型與返回值無關(guān)所以傳入空值無影響
// 創(chuàng)建老師數(shù)組
teacher tArray[3];
int len = sizeof(tArray) / sizeof(tArray[0]);
allocateStudent(tArray, len);
printInfo(tArray, len);
system("pause");
return 0;
}
//
#includeusing namespace std;
struct Hero
{string name;
int age;
string sex;
};
void bubbleSort(Hero herroArray[], int len)
{for (int i = 0; i< len - 1; i++)
{for (int j = 0; j< len - i - 1; j++)
{ if (herroArray[j].age >herroArray[j + 1].age)
{ Hero tmp = herroArray[j];
herroArray[j] = herroArray[j + 1];
herroArray[j + 1] = tmp;
}
}
}
}
void printInfo(Hero heroArray[], int len)
{for (int i = 0; i< len; i++)
{cout<< "姓名:"<< heroArray[i].name<< " 年齡:"<< heroArray[i].age<< " 性別:"<< heroArray[i].sex<< endl;
}
}
int main()
{Hero heroArray[5] =
{{"劉備",23,"男"},
{"關(guān)羽",22,"男"},
{"張飛",20,"男"},
{"趙云",21,"男"},
{"貂蟬",19,"女"}
};
int len = sizeof(heroArray) / sizeof(heroArray[0]);
// 排序前
printInfo(heroArray, len);
// 冒泡排序
bubbleSort(heroArray, len);
// 排序后
cout<< "排序后:"<< endl;
printInfo(heroArray, len);
system("pause");
return 0;
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁名稱:C++基礎(chǔ)語法-創(chuàng)新互聯(lián)
文章地址:http://aaarwkj.com/article34/dpjsse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、商城網(wǎng)站、靜態(tài)網(wǎng)站、云服務(wù)器、網(wǎng)站導(dǎo)航、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容