国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C語言練習(xí)】C語言如何操作內(nèi)存(重中之重!?。。?/h1>

這篇具有很好參考價(jià)值的文章主要介紹了【C語言練習(xí)】C語言如何操作內(nèi)存(重中之重!?。。?。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

??:如果你也對機(jī)器人、人工智能感興趣,看來我們志同道合?
??:不妨瀏覽一下我的博客主頁【https://blog.csdn.net/weixin_51244852】
??:文章若有幸對你有幫助,可點(diǎn)贊 ?? 收藏 ?不迷路??
??:內(nèi)容若有錯(cuò)誤,敬請留言 ??指正!原創(chuàng)文,轉(zhuǎn)載請注明出處


前言:

??C語言語句的本質(zhì)是什么?

以下面的代碼為例結(jié)合內(nèi)存來解析語句的本質(zhì),其實(shí)跟內(nèi)存地址密切相關(guān)。

int a;	// 編譯器申請了1個(gè)int類型的內(nèi)存格子
//格子的長度是4字節(jié),地址是確定的,但只有編譯器知道并把符號(hào)a和這個(gè)格子綁定在一起。
a = 5;	// 編譯器會(huì)把5放入符號(hào)a綁定的內(nèi)存格子中。
a += 4;	// 編譯器先把a(bǔ)原來的值讀出來,然后給這個(gè)值加4,再把加之后的和賦值給a。

??數(shù)據(jù)類型的本質(zhì)是什么?

不管是普通變量類型,還是指針類型等,只要記?。?br> 類型只是對后面數(shù)字或者符號(hào)(代表的是內(nèi)存地址)所表征的內(nèi)存的一種長度規(guī)定解析方法的規(guī)定而已。

一、內(nèi)存操作方式

1.1指針間接訪問內(nèi)存

C語言中的指針,全名叫指針變量,指針變量其實(shí)很普通變量沒有任何區(qū)別。
??譬如:
int a和int *p其實(shí)沒有任何區(qū)別,a和p都代表一個(gè)內(nèi)存地址,假設(shè)是0x30000000,但是他們對這個(gè)內(nèi)存地址的長度和解析方法不同的:
??a是int型,所以a的長度是4字節(jié),解析方法是按照int的規(guī)定來;
??p是int *類型,所以長度是4字節(jié),解析方法是int *的規(guī)定來(0x30000000開頭的連續(xù)4字節(jié)中存儲(chǔ)了1個(gè)地址,這個(gè)地址所代表的內(nèi)存單元中存放的是一個(gè)int類型的數(shù))。

??:因此,普通變量、數(shù)組、指針變量其實(shí)都沒有本質(zhì)差別,都是對內(nèi)存地址的解析,只是解析方法不一樣。

1.2數(shù)組管理內(nèi)存

數(shù)組管理內(nèi)存同樣和變量無本質(zhì)差別,僅僅是對符號(hào)解析方法的不同。
??例如:
int a;//編譯器分配4字節(jié)長度給a,并且把首地址和符號(hào)a綁定起來。
int b[10]; //編譯器分配40個(gè)字節(jié)長度給b,并且把首元素首地址和符號(hào)b綁定。
數(shù)組中第一個(gè)元素(a[0])為首元素;每一個(gè)元素類型都是int,所以長度都是4,其中第一個(gè)字節(jié)的地址就稱為首地址;首元素a[0]的首地址就稱為首元素首地址。

1.3內(nèi)存管理之棧

??什么是棧?

棧(stack)是一種數(shù)據(jù)結(jié)構(gòu),用于管理內(nèi)存。C語言中使用棧來保存局部變量。

??棧管理內(nèi)存的特點(diǎn):
1、小內(nèi)存、自動(dòng)化
2、先進(jìn)后出(first in last out,F(xiàn)ILO)

棧的特點(diǎn)是入口即出口,只有一個(gè)口,另一個(gè)口是堵死的。所以先進(jìn)去的必須后出來,類似彈匣的原理。
反之,隊(duì)列的特點(diǎn)是入口和出口都有,必須從入口進(jìn)去,從出口出來,所以先進(jìn)去的必須先出來,否則就堵住后面的。先進(jìn)先出( first in first out ,F(xiàn)IFO)隊(duì)列

3、預(yù)定棧的大小不靈活,怕溢出

首先,棧是有大小,所以棧內(nèi)存大小不好設(shè)置。如果太小怕溢出,太大怕浪費(fèi)內(nèi)存,與數(shù)組類似
其次,棧的溢出危害很大,一定要避免。因此不能定義太多或者太大的局部變量時(shí),比如:不能定義 int b[20000]。

1.4內(nèi)存管理之堆

??什么是堆?

“堆”(Heap)是一種數(shù)據(jù)結(jié)構(gòu),用于動(dòng)態(tài)分配內(nèi)存空間。堆內(nèi)存分配由程序員手動(dòng)控制,它與靜態(tài)分配的棧內(nèi)存不同。

??堆管理內(nèi)存的特點(diǎn):
1、用于管理大塊內(nèi)存

容量不限(常規(guī)使用的需求容量都能滿足)

2、手工分配&使用&釋放

申請及釋放都需要手工進(jìn)行,即需要程序員寫代碼明確進(jìn)行申請malloc及釋放free。

3、容易內(nèi)存泄漏

如果申請了內(nèi)存,但使用后未釋放,會(huì)導(dǎo)致內(nèi)存丟失,也稱為內(nèi)存泄漏。
在C/C++語言中,內(nèi)存泄漏是最嚴(yán)重的程序bug,這也是大家認(rèn)為Java/C#等語言比C/C++優(yōu)秀的地方。

4、將堆內(nèi)存管理比喻成一個(gè)倉庫

倉庫管理:堆內(nèi)存需要進(jìn)行管理,就像倉庫需要管理存儲(chǔ)的物品一樣。程序員通過調(diào)用分配函數(shù)(比如malloc()或new)來向堆申請一定大小的新內(nèi)存塊,這可以類比為在倉庫中存放新的物品。同樣地,釋放函數(shù)(比如free()或delete)會(huì)將不再需要的內(nèi)存塊歸還給堆,類似于從倉庫中取出不再需要的物品。

【C語言練習(xí)】C語言如何操作內(nèi)存(重中之重?。。。?# C語言,c語言,開發(fā)語言

??什么時(shí)候使用堆內(nèi)存?

需要內(nèi)存容量比較大時(shí),要求反復(fù)使用及釋放時(shí),很多數(shù)據(jù)結(jié)構(gòu)(譬如鏈表)的實(shí)現(xiàn)都要使用堆內(nèi)存。

??C語言操作堆內(nèi)存的接口(malloc和free)

堆內(nèi)存釋放時(shí)最簡單,直接調(diào)用free釋放即可。void free(void *ptr);
堆內(nèi)存申請時(shí),有3個(gè)可選擇的類似功能的函數(shù):malloc, calloc, realloc

void *malloc(size_t size); 
void *calloc(size_t nmemb, size_t size);	
// nmemb個(gè)單元,每個(gè)單元size字節(jié)
> void *realloc(void *ptr, size_t size);
> //改變原來申請的空間的大小的

??譬如要申請10個(gè)int元素的內(nèi)存:

malloc(40);		malloc(10*sizeof(int));
calloc(10, 4);		calloc(10, sizeof(int));

數(shù)組定義時(shí)必須同時(shí)給出數(shù)組元素個(gè)數(shù)(數(shù)組大?。?,而且一旦定義再無法更改。在Java等高級(jí)語言中,有一些語法技巧可以更改數(shù)組大小,但其實(shí)這只是一種障眼法。它的工作原理是:先重新創(chuàng)建一個(gè)新的數(shù)組大小為要更改后的數(shù)組,然后將原數(shù)組的所有元素復(fù)制進(jìn)新的數(shù)組,然后釋放掉原數(shù)組,最后返回新的數(shù)組給用戶;

堆內(nèi)存申請時(shí)必須給定大小,然后一旦申請完成大小不變,如果要變只能通過realloc接口。realloc的實(shí)現(xiàn)原理類似于上面說的Java中的可變大小的數(shù)組的方式。

#include <stdio.h>
#include "test.h"

int main() {
    T_Size* Ming = (T_Size*)malloc(sizeof(T_Size));
    if (Ming == NULL) {
        printf("內(nèi)存分配失敗\n");
        return -1;
    }

    Ming->m_bWeigth = 75;
    Ming->m_wHeigth = 180;
    printf("升高和體重分別為%d,%d", Ming->m_wHeigth, Ming->m_bWeigth);
    free(Ming); // 釋放動(dòng)態(tài)分配的內(nèi)存
    return 0;
}

總結(jié):

??堆的優(yōu)勢和劣勢
優(yōu)勢:靈活;
劣勢:需要程序員去處理各種細(xì)節(jié),所以容易出錯(cuò),嚴(yán)重依賴于程序員的水平。

【C語言練習(xí)】C語言如何操作內(nèi)存(重中之重?。。。?# C語言,c語言,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-704924.html

到了這里,關(guān)于【C語言練習(xí)】C語言如何操作內(nèi)存(重中之重?。。。┑奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C語言動(dòng)態(tài)內(nèi)存練習(xí):【通訊錄(動(dòng)態(tài)內(nèi)存版本)實(shí)現(xiàn)】

    前面我們寫了一個(gè)靜態(tài)數(shù)組版本的通訊錄,再結(jié)合剛學(xué)習(xí)的動(dòng)態(tài)內(nèi)存管理的知識(shí),我們現(xiàn)在來實(shí)現(xiàn)一個(gè)動(dòng)態(tài)內(nèi)存版本的通訊錄。 動(dòng)態(tài)內(nèi)存版本的通訊錄,主要還是為了解決靜態(tài)數(shù)組版本的通訊錄空間太大導(dǎo)致的內(nèi)存浪費(fèi)和空間太小不夠存放的問題。 擴(kuò)容策略: 為通訊錄設(shè)置

    2023年04月13日
    瀏覽(35)
  • 【C語言】數(shù)據(jù)在內(nèi)存中存儲(chǔ)練習(xí)

    【C語言】數(shù)據(jù)在內(nèi)存中存儲(chǔ)練習(xí)

    廢話不多說直接上題目: 寫出-1這個(gè)數(shù)的二進(jìn)制補(bǔ)碼 當(dāng)類型為char的時(shí)候數(shù)據(jù)需要截?cái)鄡?chǔ)存 當(dāng)數(shù)據(jù)以整數(shù)類型打印的時(shí)候就要發(fā)生整型提升、 如下分析: 當(dāng)把-1的補(bǔ)碼放到char 類型的數(shù)據(jù)中存儲(chǔ)是會(huì)發(fā)生截?cái)嗳鐖D所示: 所以a,b,c,中存放的都是11111111 但是當(dāng)以整數(shù)的形式取出來

    2024年02月06日
    瀏覽(18)
  • C語言數(shù)據(jù)在內(nèi)存中存儲(chǔ)---整型提升練習(xí)

    C語言數(shù)據(jù)在內(nèi)存中存儲(chǔ)---整型提升練習(xí)

    前言:學(xué)習(xí)了C語言中的整型提升,總是感覺聽的時(shí)候很明白,但當(dāng)自己做題的時(shí)候,又總是遺漏了哪一步。自己的感悟:整型提升步驟以及原理都一樣,就是把步驟記清楚一步一步的來就行。因此通過下面的一道題來每日復(fù)習(xí)。 前景回顧: 整型提升:一個(gè)表達(dá)式中的操作數(shù)

    2024年02月10日
    瀏覽(26)
  • C語言操作符練習(xí)

    C語言操作符練習(xí)

    曾經(jīng)有一道面試題,要求 不能創(chuàng)建臨時(shí)變量(第三個(gè)變量),實(shí)現(xiàn)兩個(gè)數(shù)的交換。 這道題如果沒有前半句的修飾,就只是簡單的一道基礎(chǔ)題。 法一: 但是如果加上了前半句的修飾,就需要更換思路了。 法二: 第二種方法比第一種方法更考驗(yàn)思維,但是中方法也有弊端,如

    2024年02月19日
    瀏覽(22)
  • 【C語言基礎(chǔ)】:內(nèi)存操作函數(shù)

    【C語言基礎(chǔ)】:內(nèi)存操作函數(shù)

    ? ? ?? ? 書山有路勤為徑,學(xué)海無涯苦作舟。 創(chuàng)作不易,寶子們!如果這篇文章對你們有幫助的話,別忘了給個(gè)免費(fèi)的贊喲~ 一、memcpy函數(shù)的使用和模擬實(shí)現(xiàn) 函數(shù)原型 : 內(nèi)存復(fù)制塊 將num字節(jié)的值從源指向的位置直接復(fù)制到目標(biāo)指向的內(nèi)存塊。 源指針和目標(biāo)指針?biāo)赶虻膶?/p>

    2024年04月11日
    瀏覽(19)
  • 【C語言】字符函數(shù)和內(nèi)存操作函數(shù)

    【C語言】字符函數(shù)和內(nèi)存操作函數(shù)

    大家好,我是蘇貝,本篇博客帶大家了解字符函數(shù)和內(nèi)存操作函數(shù),如果你覺得我寫的還不錯(cuò)的話,可以給我一個(gè)贊??嗎,感謝?? 下面函數(shù)的頭文件都是ctype.h 函數(shù) 如果他的參數(shù)符合下列條件就返回真即非0,不符合則返回0 iscntrl 任何控制字符 isspace 空白字符:空格‘ ’

    2024年02月08日
    瀏覽(17)
  • 操作系統(tǒng)動(dòng)態(tài)內(nèi)存分配算法【C語言實(shí)現(xiàn)】

    操作系統(tǒng)動(dòng)態(tài)內(nèi)存分配算法【C語言實(shí)現(xiàn)】

    題目: 采用五個(gè)算法,各自作業(yè)在1024kB空間上分配情況。 內(nèi)存可變分區(qū)分配仿真算法 :首次適應(yīng),下次適應(yīng),最佳適應(yīng),最壞適應(yīng)和快速分配。 使用的結(jié)構(gòu)體數(shù)組表示起始地址,內(nèi)存塊大小,內(nèi)存塊狀態(tài)(0空閑,1占用) void bubbleprint(struct Info info[]) 函數(shù)是為了內(nèi)存塊大小

    2024年02月03日
    瀏覽(24)
  • c語言——字符串函數(shù)和內(nèi)存操作函數(shù)

    c語言——字符串函數(shù)和內(nèi)存操作函數(shù)

    包含在string.h頭文件里 功能:返回字符串中有效字符的個(gè)數(shù),遇到‘\\0’結(jié)束,不包括結(jié)束符‘\\0’. 函數(shù)的參數(shù)為------const char* str:字符指針 返回值的類型------size_t:無符號(hào)整數(shù)(即:unsigned int) 模擬實(shí)現(xiàn)strlen: 方法一:計(jì)數(shù)器的方法 方法二:不能創(chuàng)建臨時(shí)變量的計(jì)數(shù)器

    2024年02月14日
    瀏覽(27)
  • C語言之字符串,內(nèi)存操作函數(shù)詳解(一)

    C語言之字符串,內(nèi)存操作函數(shù)詳解(一)

    ??博主CSDN主頁:杭電碼農(nóng)-NEO?? ? ?專欄分類:C語言學(xué)習(xí)分享? ? ??代碼倉庫:NEO的學(xué)習(xí)日記?? ? ??關(guān)注我??帶你學(xué)習(xí)更多C語言知識(shí) ? ???? C語言的標(biāo)準(zhǔn)庫為我們提供了豐富的字符串操作函數(shù)與內(nèi)存操作函數(shù),有我們熟悉的 strlen ,strcpy ,也有我們不熟悉的 strchr , strstr 等

    2024年02月08日
    瀏覽(31)
  • 【C語言內(nèi)存函數(shù)精選】memcpy、memset、memmove及仿真實(shí)現(xiàn)!掌握內(nèi)存操作的藝術(shù)!

    【C語言內(nèi)存函數(shù)精選】memcpy、memset、memmove及仿真實(shí)現(xiàn)!掌握內(nèi)存操作的藝術(shù)!

    ?? 博客主頁: 小鎮(zhèn)敲碼人 ?? 歡迎關(guān)注:??點(diǎn)贊 ????留言 ??收藏 ?? 任爾江湖滿血骨,我自踏雪尋梅香。 萬千浮云遮碧月,獨(dú)傲天下百堅(jiān)強(qiáng)。 男兒應(yīng)有龍騰志,蓋世一意轉(zhuǎn)洪荒。 莫使此生無痕度,終歸人間一捧黃。?????? ?? 我的努力求學(xué)沒有得到別的好處,只

    2024年02月15日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包