C++學習Day2

結構體指針

struct student
{
string name;
int age;

}
int main()
{
1.創建學生結構體變量 
struct student s={"張三",18};
一般會簡便寫成 student s={"張三",18};
2.通過指針指向結構體變量
struct student*p=&s;
一般會簡便寫成 student*p=&s;
結構體使用時候 s.name
指針使用時候 p->name
}

結構體嵌套結構體

struct student ( 被嵌套的要寫到上面)
{
string name;
int age;
int score;
}
struct teacher
{
int id;
int age;
struct student stu;
}
int main()
{
teacher t;
t.id=10;
t,age=28;
t.stu.name="小王"
}

結構體做函數參數和變量一樣,分爲值傳遞(正常寫)和引用傳遞(struct student * stu),將函數中的形參改爲指針,可以減少內存空間,而且不會複製新的副本出來

結構體中const

用來將結構體改爲只讀,在函數使用結構體的時候的形參改爲 const student *s,可以防止誤操作改變struct的值

C++內存的分區模型

  • 代碼區:存放函數體的二進制代碼,由操作系統進行管理
  • 全局區:存放全局變量和靜態變量以及常量
  • 棧區:由編譯器自動分配釋放,存放函數的參數值(形參),局部變量等 局部變量地址不要返回!不要return局部變量,只有第一次使用的時候是有的,因爲編譯器做了一次保留,第二次就變成亂碼了,但是new過之後的局部變量不會被釋放
  • 堆區:由程序員分配和釋放,若程序員不釋放,程序結束時由操作系統回收 c++中利用new可以把變量開闢到堆區
 int *func()
 {
 int*p=new int(10);
 return p;
 }

new關鍵字返回該數據類型的指針

C++引用(起別名)

數據類型 &別名=原名 別名可以是原名,即引用傳遞 就是c#裏的ref,需要函數命名時候 void example (int &a,int &b) ,這樣外面的a和b就相當於被這裏引用,他們改變的值指向同一內存地址,example 裏a,b的改變外面的a,b也相應改變
int &b=a;
使用時,必須要初始化,且初始化之後不能改變

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章