0.最近在複習c++,好多東西都忘了 ==!!
從部落格中,書中看到的一些東西,在這裡簡單總結下,沒有章法,看到哪,複習到哪
1. 引用
c++中引用 具備了 指標的 所有功能
區別:(1) 引用在定義時必須初始化.引用和變數共享同一塊記憶體空間,而指標單獨有記憶體空間
(2) 指標進行刪除後,一般需要將其指向null,防止野指標,而引用至始而終都是它初始化時的位址,而且也不用刪除,它會在作用域範圍外由系統**
引用和它引用的變數指向的是同一塊記憶體空間
當修改其中任意乙個值時,兩個值都改變,當對引用重新賦乙個新值時,引用的值和原來引用指向的值都改變為這個新值,而引用位址不變
在c ++ 中還可以定義乙個類的物件的引用,與物件共享一塊記憶體
c++中 3 種傳遞函式引數的方式
(1)按值傳遞
(2)引用傳遞
(3)指標傳遞
3種方式的示例**如下:
#include using namespace std;
void f(int a)
void g(int * a)
void h(int &a)
int main()
可以看到按值傳遞,函式f()是不能修改a的
因為按值傳遞,只是把主函式a的值給了f函式的a值,這兩個a的位址不是同乙個位址,
在執行的過程中,會把主函式a的位址的資料拷貝給set函式a的位址
2 c++ 記憶體管理
記憶體分配方式
1. 從靜態區分配,一般是全域性變數和static型別變數
2.從棧區分配記憶體,一般是區域性的變數,會隨著所在函式的結束而自動釋放
3.從堆中分配,一般是使用手動分配,使用malloc()函式和new來申請任意大小空間,不過要手動釋放空間,相應的使用free()函式和delete釋放,
如果不釋放該空間,而且指向該空間的指標指向了別的空間.則該空間就無法釋放,造成記憶體洩露,造成了記憶體浪費
動態記憶體釋放問題與野指標
當我們使用free()和delete釋放一塊記憶體時,指標還是指向原來的位址,不過這時候的指標時野指標
1.指標銷毀了,並不表示所指的空間也得到了釋放 :記憶體洩露
2.記憶體被釋放了,並不表示指標也被銷毀了或指向null :野指標
示例**:
#include #include #include #include using namespace std;
int main()
free(p);
// 所謂的野指標
cout << "p:" << p << endl;
if(p != null)
p = null;
return 0;
}
指標的記憶體的傳遞
#include3 動態陣列(從csdn還是cnblogs中看到的,直接在這貼吧,**找不到了)1維<
iostream
>
#include
<
stdlib.h
>
#include
<
string
.h>
using
namespace
std;
//返回記憶體位址方式,這是正確的 !
//因為是動態記憶體分配,在堆上分配的
char
*getmemory()
//常見錯誤是在棧上分配的被返回了,錯誤的
char
*getmemory2()
//通過指標的指標方式申請記憶體
void
getmemory3(
char
**p)
}int
main()
p2
=getmemory2();
if(p2)
getmemory3(
&p3);
if(p3)
return0;
}
#include #include int main()
stu1;
void print()
int print2()
#pragma pack (1) /*指定按1位元組對齊*/
typedef union stu
stu;
#pragma pack () /*取消指定對齊,恢復預設對齊*/
typedef union stu2
stu2;
int main()
對於結構體:
#include typedef struct stu1
stu1;
typedef struct stu2
stu2;
typedef struct stu3
stu3;
typedef struct stu4
stu4;
typedef struct stu5
stu5;
typedef union stu6
stu6;
typedef struct stu7
stu7;
typedef struct stu8
stu8;
int main()
size_t ,對於大小的比較,或者其他計算,會變成其補碼形式
#include using namespace std;
int main()
; return str;
}//棧裡面的變數都是臨時的。當前函式執行完成時,
//相關的臨時變數和引數都被清除了,所以返回的指標指向的已經是隨機的了
//但是str首位址被當成指標來處理,存放在堆中。
char* get_str2()
; return str;
}int main(int argc, char* ar**)
{ char* p = get_str();
cout << *p << endl;
cout << *(p+1) << endl;
cout << p << endl;
cout << "********************====" << endl;
char *p2 = get_str2();
//第1次執行 *p2的時候,由於p2指標的首位址被返回了,還是可以取到*p2的內容的
/*可以試試取*(p2+1),也是可以取到的
*/cout << *p2 << endl;
//第一次呼叫*p2的時候還是有資料的,但是第2次就沒有了,
//說明cout之後指標已經被破壞了
cout << *p2 << endl;
cout << *(p2+1) <
參考:整理自網際網路
C C 的一些亂七八糟的總結(二) 未完
1.模板 1 include iostream 23 using namespace std 4 函式模板 5template class t 6t cmin t m,t n 710 intmain 11 1 include iostream 23 using namespace std 45 模板...
一些亂七八糟的彙總
也不是很正式的一篇文章,就是有時做事的時候總會遇到一些奇奇怪怪的問題,或者有一些比較常用但是總是記不住或者懶得記的東西。標題是索引。應該會不斷加東西進去,就當字典用了唄,下次遇到就不用費勁找了。一般來說,無法解析的外部符號 後面就是一大串看不懂的鬼東西。這個是鏈結錯誤,一般來說在 上是不會有小紅線提...
一些亂七八糟的東西
1.zsh與bash的切換 切換bash chsh s bin bash 切換zsh chsh s bin zsh 2.檢視當前所使用的shell echo shell 3.初次安裝mysql,在設定中啟動後要新增環境 1 進入 usr local mysql bin,檢視此目錄下是否有mysql,...