#include
using namespace std;
int main()
{
cout << "Hello World" << endl;
成都創(chuàng)新互聯(lián)公司秉承實(shí)現(xiàn)全網(wǎng)價(jià)值營(yíng)銷(xiāo)的理念,以專(zhuān)業(yè)定制企業(yè)官網(wǎng),網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作,微信平臺(tái)小程序開(kāi)發(fā),網(wǎng)頁(yè)設(shè)計(jì)制作,手機(jī)網(wǎng)站開(kāi)發(fā),網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣幫助傳統(tǒng)企業(yè)實(shí)現(xiàn)“互聯(lián)網(wǎng)+”轉(zhuǎn)型升級(jí)專(zhuān)業(yè)定制企業(yè)官網(wǎng),公司注重人才、技術(shù)和管理,匯聚了一批優(yōu)秀的互聯(lián)網(wǎng)技術(shù)人才,對(duì)客戶(hù)都以感恩的心態(tài)奉獻(xiàn)自己的專(zhuān)業(yè)和所長(zhǎng)。
system("pause");
return 0;
}
在控制臺(tái)中 輸出 Hello world
變量的作用: 給一段指定的內(nèi)存空間起名,方便反操作這段內(nèi)存
方便我們管理內(nèi)存空間
在內(nèi)存中 我們有一個(gè)變量 10 , 他的內(nèi)存編號(hào)是十六進(jìn)制的
例如: 0x0000 => 10 那我們要找這個(gè)內(nèi)存 數(shù)據(jù)量一大 就比較麻煩了 都是16進(jìn)制數(shù)
所以 我們起了個(gè)a 來(lái)作為變量名(方便管理內(nèi)存空間)
常量: 用于記錄程序中不可更改的數(shù)據(jù)
c++有兩種方式
#define 宏常量 在文件上方定義表示一個(gè)常量
const所修飾的變量 在變量前+const 不可更改
#define day 7 //在頭文件那邊
coust int a = 10; //這個(gè)也不可修改 也會(huì)報(bào)錯(cuò)
數(shù)據(jù)類(lèi)型: 整型
short 短整型 占用2字節(jié)
int 整型 4字節(jié)
long 長(zhǎng)整型 Windows為 4字節(jié) , linux為4字節(jié)(32位操作系統(tǒng)),8字節(jié)(64位操作系統(tǒng))
long long 長(zhǎng)長(zhǎng)整型 8字節(jié)
數(shù)據(jù)類(lèi)型 浮點(diǎn)型
float 單精度浮點(diǎn)數(shù) 4字節(jié)
double 雙精度浮點(diǎn)數(shù) 8字節(jié)
如果只寫(xiě) float a = 3.14;
那這樣 這個(gè)3.14這邊是 double 類(lèi)型的, 之后程序之后會(huì)進(jìn)行一個(gè)轉(zhuǎn)換,會(huì)把3.14轉(zhuǎn)換成float
多了一個(gè)數(shù)據(jù)轉(zhuǎn)換的過(guò)程
//科學(xué)計(jì)數(shù)法
float f1 = 3e2;//e的后面是一個(gè)正數(shù) 代表了 3* 10的2次方 代表300
float f2 = 3e-2;//e的后面是一個(gè)負(fù)數(shù) 代表了 3* 0.1的2次方 代表0.03
數(shù)據(jù)類(lèi)型 字符
char ch = 'a';
只能寫(xiě)1個(gè)字符
c和c++中 字符變量只占一個(gè)字節(jié)
字符型變量并不是把字符本身放到內(nèi)存中存儲(chǔ),而是將對(duì)應(yīng)的ascll編碼放入到存儲(chǔ)單元
數(shù)據(jù)類(lèi)型 字符串
char a[] = "";//c語(yǔ)言風(fēng)格的字符串
string a = "bbb";//c++語(yǔ)言風(fēng)格的字符串
#include
數(shù)據(jù)類(lèi)型: bool 布爾
bool類(lèi)型占 1個(gè)字節(jié)大小
sizeof 求出 數(shù)據(jù)類(lèi)型占用內(nèi)存大小
sizeof(數(shù)據(jù)類(lèi)型/變量)
轉(zhuǎn)義字符:不能顯示出來(lái)的ASCll字符
數(shù)據(jù)的輸入 cin 關(guān)鍵字
cin>>a 將控制臺(tái)輸入的 數(shù)字 賦值給a
數(shù)組:就是一個(gè)集合 里面存放了 相同的數(shù)據(jù)類(lèi)型
數(shù)組是由連續(xù)的內(nèi)存位置組成的;
一維數(shù)組
可以統(tǒng)計(jì)整個(gè)數(shù)組在內(nèi)存中的長(zhǎng)度
可以獲取數(shù)組在內(nèi)存中的首地址
&取地址符號(hào)
二維數(shù)組 矩陣數(shù)組
int a[4][5] ;
為4 行 5 列的 二維矩陣數(shù)組
函數(shù)的定義
返回值類(lèi)型 函數(shù)名 (參數(shù)列表){
函數(shù)體
return 表達(dá)式:
}
函數(shù)必須寫(xiě)在Main方法后面 要嘛就必須得聲明函數(shù) 讓編譯器知道你有這個(gè) 函數(shù)的名稱(chēng) 以及如何調(diào)用函數(shù)
函數(shù)的分文件寫(xiě)法:
創(chuàng)建.h 后綴名的頭文件
創(chuàng)建.cpp后綴名的源文件
在頭文件中寫(xiě)函數(shù)的聲明
在源文件中寫(xiě)函數(shù)的定義
這是在c++中寫(xiě)的順序
我們?cè)?.h 頭文件聲明的 那個(gè)方法 ,得有
#include
using namespace std;
這兩行
之后在你的 源文件那邊 需要 引用你的 頭文件
之后在我們Main方法那邊 需要引用 頭文件
指針
可以通過(guò)指針間接訪問(wèn)內(nèi)存
內(nèi)存編號(hào)都是從0開(kāi)始記錄的 用16進(jìn)制數(shù)來(lái)表示
可以利用指針變量保存地址
int a= 10 ; 內(nèi)存中是 10這個(gè)數(shù)據(jù), 用a來(lái)找 編號(hào)0x0001;
我用一個(gè) p 來(lái)存儲(chǔ) 0x0001 這個(gè)地址 那這個(gè) p 就是指針
用p這個(gè)指針來(lái)記錄了 a的地址
int * p = &a;
如何使用指針
通過(guò)解引用的方式來(lái)找到指針指向的內(nèi)存
指針前 加一個(gè) * 號(hào) ,代表解引用,代表你找到了 p指針存儲(chǔ)在內(nèi)存中的數(shù)據(jù)
*p
我們把 *p 改為1000 *p = 1000;
那內(nèi)存中的地址中的數(shù)據(jù)也一樣發(fā)生改變 a的數(shù)據(jù)也是1000;
指針也是一種數(shù)據(jù)類(lèi)型 是指針變量
指針變量占的內(nèi)存空間是多少?
在 32位操作系統(tǒng)下 都是 占用4個(gè)字節(jié)空間
在64位操作系統(tǒng)下 占用8個(gè)字節(jié)空間
空指針和 野指針
空指針: 指針變量指向內(nèi)存中編號(hào)為0的空間
用途:初始化指針變量
//空指針
// 空指針用于給指針變量進(jìn)行初始化
注意:空指針指向的內(nèi)存是不可以訪問(wèn)的 ;
0~255 之間的內(nèi)存編號(hào)是系統(tǒng)占用的 不允許更改,訪問(wèn)
int* p = NULL; //這個(gè)就是空指針的寫(xiě)法
這就是野指針,這種問(wèn)題 不會(huì)被編譯器所發(fā)現(xiàn) 編譯會(huì)通過(guò) 但是會(huì)報(bào)錯(cuò)啟動(dòng)后
(讀取訪問(wèn)權(quán)限異常)
在程序中要避免出現(xiàn)這種野指針
int* p = (int *) 0x1100;
cout << *p << endl;
0x1100 并沒(méi)有什么開(kāi)辟內(nèi)存 你直接指向 就會(huì)有問(wèn)題
const 修飾指針
const 修飾指針 ----常量指針
const 修飾常量 ----指針常量
const 既修飾指針, 又修飾常量
const 常量指針: \
就是在指針前面加 const
const int * p =&a;
當(dāng)他是常量指針的時(shí)候 指針的指向的地址 可以修改 , 但是 指針指向的值不可以修改
const int * p = &a;
*p = 20 ; //錯(cuò)誤
*p = &b ; //正確
指針常量
int * const p = &a; //這就是 指針常量 在const后面的是 常量 那就是 指針常量
指針的指向 不可以改 但是 指向的值可以更改
*p = 20 ; //正確
*p = &b ; //錯(cuò)誤
const 既修飾了指針 又修飾常量
const int * const p = &a;那就兩個(gè)都不可以修改
*p = 20 ; //錯(cuò)誤
*p = &b ; //錯(cuò)誤
指針與數(shù)組
//利用指針訪問(wèn)數(shù)組中的元素
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int* p = arr;//arr 就是 數(shù)組的首地址
cout << "第一個(gè)數(shù)據(jù)-------" << *p;
for (int i = 0; i < 10; i++)
{
cout << "第" << i+1 << "個(gè)數(shù)據(jù)是=" << *p<
}
p++;//指針像后偏移四個(gè)字節(jié) ;
指針與函數(shù)
作用 利用指針作函數(shù)的參數(shù) 可以 修改 實(shí)參的值
其實(shí)就是 地址 傳遞 就是根據(jù)你傳入的那個(gè)地址,利用內(nèi)存地址 來(lái) 操作 那個(gè) 數(shù)據(jù)
最后 你外部的 那個(gè)被取地址的數(shù)據(jù) 如果在內(nèi)部有改變 你外部也會(huì)發(fā)生改變 ;
void GetSum(int *a, int *b,int *c)
{
*c = *a + *b;
}
void Main()
{
int a = 10 ;
int b = 20 ;
int c = 0 ;
GetSum(&a,&b,&c);
}
根據(jù)上面的方法 最后輸出的 c 就是 30 ;
結(jié)構(gòu)體
結(jié)構(gòu)體屬于用戶(hù)自定義的數(shù)據(jù)類(lèi)型,允許用戶(hù)存儲(chǔ)不同的數(shù)據(jù)類(lèi)型
struct 結(jié)構(gòu)體名 {};
實(shí)例化結(jié)構(gòu)體的 三種方法
struct Student s1;
struct Student s1={變量1,變量2,變量3}// 必須一一對(duì)應(yīng)
還有一個(gè)就是在 創(chuàng)建結(jié)構(gòu)體的時(shí)候在后面直接創(chuàng)建
struct 結(jié)構(gòu)體名 {}s1;
在創(chuàng)建結(jié)構(gòu)體不可以省略 struct
在調(diào)用創(chuàng)建的時(shí)候可以省略 struct
結(jié)構(gòu)體數(shù)組
struct 結(jié)構(gòu)體名 數(shù)組名[個(gè)數(shù)] = {{} , {} , {} };
結(jié)構(gòu)體指針
//創(chuàng)建結(jié)構(gòu)體變量
Student s1 = {"結(jié)構(gòu)體",18,100};
//通過(guò) 指針p 取得 結(jié)構(gòu)體的地址
Student* p = &s1;
//通過(guò) -> 來(lái)獲得結(jié)構(gòu)體中的屬性
p->age;
如果要獲得 指針指向的結(jié)構(gòu)體的數(shù)據(jù) 那就需要 用 ->來(lái)獲得他的數(shù)據(jù)
結(jié)構(gòu)體嵌套結(jié)構(gòu)體
1:
Student s1 = {"",18,100};
Teacher teacher = { 1,18,"老師",s1 };
2:
Teacher t1;
t1.age = 1;
t1.id = 2;
t1.name = 3;
t1.stu.age = 18; t1.stu.name = "學(xué)生"; t1.stu.score = 100;
兩種方法都可以
在第二個(gè)方法中 必須在結(jié)構(gòu)體中 創(chuàng)建 Student這個(gè) 結(jié)構(gòu)體的時(shí)候 要加上 struct
在結(jié)構(gòu)體中 const的使用場(chǎng)景
在 函數(shù)中 void Prist(const student * stu)
{
}
這樣就不會(huì)在函數(shù)中修改這個(gè)結(jié)構(gòu)體 ,如果要修改 就不要加const
防止誤操作
將函數(shù)中的形參改為指針,可以減少內(nèi)存空間 而且不會(huì)有多余的副本產(chǎn)生
搜索
復(fù)制