日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【C++ grammar】C++简化内存模型

發布時間:2023/12/1 c/c++ 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++ grammar】C++简化内存模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、stack(棧)
編譯器自動分配內存(函數內部定義得局部變量、形參)
2、堆(Heap)
一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收(new和delete)
3、Global\Static(全局區、靜態區)
1、全局變量和靜態變量的存儲是放在一塊兒的
2、可以簡單認為:程序啟動全局/靜態變量就在此處、程序結束釋放
4、Constant(常量區)
可以理解為所有常量都放在一起,該區域內容不可修改、
c++內存示例:
堆向高地址方向生長
棧向低地址方向生長
所以中間的空白區域會由兩者共享,增大了內存的利用效率。

觀察變量存放位置;


問題:
下面哪個語句可以接在const char* p = “Hello”;后面:
1、p[0]=‘A’
2、p = “World”;
3、cin>>p
4、*(p+1)=‘e’

1和4共同的問題:表達式必須是可以修改的左值
運算符的左邊應該是一個“左值”。所謂“左值”就是指在程序中占用內存空間、可以被修改的量,比如各種變量。
‘’A‘’是一個字符串常量,他一經定義系統就會分配一段地址給他(常量區)式子左邊p[0]也是一個常量地址,所以不能用 = 將一個常量地址賦值給一個常量地址。這也就能回答問題:表達式必須是可修改的左值的答案,因為p[0]也是一個常量地址。
3、符號方向反了

關于1、4問題的詳細解釋看這篇文章:
C語言中字符串賦值處理方式

char *p,a='5'; p=&a; //顯然是正確的, p="abcd"; //但為什么也可以這樣賦值??

雙引號做了3件事:
1.申請了空間(在常量區),存放了字符串
2. 在字符串尾加上了’/0’
3.返回地址
這里就是 返回的地址 賦值給了 p

總結

以上是生活随笔為你收集整理的【C++ grammar】C++简化内存模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。