1. 程式人生 > >C++筆記 第十課 C++中新成員---狄泰學院

C++筆記 第十課 C++中新成員---狄泰學院

如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。
學習C++編譯環境:Linux

第十課 C++中的新成員

1.動態記憶體分配

C++中的動態記憶體分配
C++中通過new關鍵字進行動態記憶體申請
C++中的動態記憶體申請是基於型別進行的
delete關鍵字用於記憶體釋放
在這裡插入圖片描述

10-1 C++中的動態記憶體分配

#include <stdio.h>
int main()
{
    int* p = new int;
    
    *p = 5;
    *p = *p + 10;
    
    printf("p = %p\n", p);
    printf("*p = %d\n", *p);
    
    delete p;
    
    p = new int[10]; //p所指向的陣列空間至少佔用40個位元組空間
    
    for(int i=0; i<10; i++)
    {
        p[i] = i + 1;
        
        printf("p[%d] = %d\n", i, p[i]);
    }
    
    delete[] p;
    
    return 0;
}
執行結果
[email protected]
:~/c++$ g++ 10-1.cpp [email protected]:~/c++$ ./a.out p = 0x707c20 *p = 15 p[0] = 1 p[1] = 2 p[2] = 3 p[3] = 4 p[4] = 5 p[5] = 6 p[6] = 7 p[7] = 8 p[8] = 9 p[9] = 10

new關鍵字與malloc函式的區別
new關鍵字是C++的一部分
malloc是由C庫提供的函式
new以具體型別為單位進行記憶體分配
malloc以位元組為單位進行記憶體分配
new在申請單個型別變數時可進行初始化
malloc不具備記憶體初始化的特性
new關鍵字的初始化
在這裡插入圖片描述

10-2 初始化動態記憶體

#include <stdio.h>
int main()
{                           //兩行程式碼區別
    int* pi = new int(1);   //申請單個變數,並初始化為1
// int* pa = new int[1];    //申請陣列空間,大小為1,pa指向只有一個int元素的陣列
//上兩行程式碼區別:
    float* pf = new float(2.0f);
    char* pc = new char('c');
    printf("*pi = %d\n", *pi);
    printf("*pf = %f\n", *pf);
    printf("*pc = %c\n", *pc);
    
    delete pi;
    delete pf;
    delete pc;
    
    return 0;
}
執行結果
*pi = 1
*pf = 2.000000
*pc = c

2.C++中的名稱空間

在C語言中只有一個全域性作用域
C語言中所有的全域性識別符號共享同一個作用域
識別符號之間可能發生衝突
C++中提出了名稱空間的概念
名稱空間將全域性作用域分成不同的部分
不同名稱空間中的識別符號號同名且不會發生衝突
名稱空間可以相互巢狀
全域性作用域也叫預設名稱空間
C++名稱空間的定義
在這裡插入圖片描述
C++名稱空間的使用
使用整個名稱空間:using namespace name;
使用名稱空間中的變數:using name::variable;
使用預設名稱空間中的變數:::variable

10-3 名稱空間的使用

#include <stdio.h>
namespace First
{
    int i = 0;
}
namespace Second
{
    int i = 1;
    
    namespace Internal
    {
        struct P
        {
            int x;
            int y;
        };
    }
}
int main()
{
    using namespace First;
    using Second::Internal::P; //使用結構體
    
    printf("First::i = %d\n", i);
    printf("Second::i = %d\n", Second::i);
    
    P p = {2, 3};
    
    printf("p.x = %d\n", p.x);
    printf("p.y = %d\n", p.y);
    
    return 0;
}
執行結果
First::i = 0
Second::i = 1
p.x = 2
p.y = 3

小結
C++中內建了動態記憶體分配的專用關鍵字
C++中的動態記憶體分配可以同時進行初始化
C++中的動態記憶體分配是基於型別進行的
C++中名稱空間概念用於解決名稱衝突問題