宏定義和內聯函數的學習


宏定義可以提高效率,但是宏不是函數。 預編譯通過代碼復制的方式代替函數調用,省去了諸如函數壓棧等系統過程,從而提高了效率。但是由于宏定義僅僅是代碼替換,所以引起很多問題。
#define? MAX(a,b) ?(a) > (b) ? ( a) : (b)
result=MAX(A,B)?+2 ?編譯器對其解釋為 (a) > (b) ? (a) : (b)+2 .導致該語句執行與預期不符。
宏定義的另一個缺點就是無法訪問類的私有成員。

而內聯函數通過把代碼直接復制進調用函數體內,避免產生某些系統過程,同樣提高了效率,但是 內聯函數可以進行類型檢查,this指針同樣能應用,這是宏定義無法比擬的。

內聯函數必須是函數的聲明和定義一體,且在函數前面加inline


內存的三種分配方式:靜態存儲區分配,棧上分配,堆上分配。

內存使用常見錯誤

(1)內存分配不成功,卻使用它。對策:使用前檢查內存是否為NULL。

(2)內存分配成功,但沒有初始化就使用它。對策:內存分配后初始化。

(3)內存分配成功且已經初始化,但是越界。對策:做越界檢查。

(4)忘記釋放內存,造成內存泄漏。對策:內存動態分配和釋放必須成雙配對。

(5)釋放了內存卻繼續使用它。

(a)對象關系過于復雜,理不清楚究竟釋放了沒有。

(b)return指向棧內存的指針或引用。

(c)free或delete內存后,沒有把指針置為NULL。導致野指針。

指針與數組。數組名對應著(而不是指向)一塊內存,在生存期內,其地址不可改變,只能是數組內容改變。

sizeof():

sizeof(數組)= 數組元素個數*sizeof(數組的元素數據類型)。

sizeof(指針)= 4;

數組作為參數傳遞時,數組名自動退化為指針類型,即sizeof(數組)=4;

sizeof(結構體或者類):這個有點麻煩,和編譯器的設置有關系,pragma pack(n)是編譯器指定的內存字節對齊方式,sizeof(結構或者類)和pragma pack(n)關系密切,默認的n=8,結構中的成員占用的內存起始地址為成員的數據類型的大小和n相比較的較小值。

指針參數

不要讓指針參數在函數體內部申請內存,如果非要指針在函數體內部申請內存,就要用指針的指針。函數的返回值不能使用棧內分配的變量地址。

野指針:用malloc和new 分配了內存,就得用free和delete 釋放,否則造成內存泄漏,但是只釋放內存還是不夠安全的,必須在釋放內存后,讓指針指向NULL,才不至于造成野指針。我理解的野指針就是沒有正確指向的指針。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254408.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254408.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254408.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HAProxy介紹及配置文件詳解

一、HAProxy簡介 HAProxy是一個開源的、高性能的、基于TCP和HTTP應用的負載均衡軟件,借助HAProxy可快速、可靠地提供基于TCP和HTTP應用的負載均衡解決方案 二、HAProxy優點 1) 可靠性和穩定性非常好,可以與硬件的F5相媲美2) 最高可以同時維護40000--5000…

unbutu安裝搜狗輸入法【轉載】

安裝支持庫 sudo apt-get install fcitx libssh2-1 如果安裝過程中出現錯誤失敗,運行apt-get -f install 查看支持庫是否安裝成功 dpkg -l | grep fcitx dpkg -l | grep libssh 下載搜狗輸入法 wget "http://pinyin.sogou.com/linux/download.php?flinux&…

深入理解halcon相機標定

目錄相機標定簡介深度說明1、相機標定參數介紹2、標定板詳細介紹問題1:halcon是否只能使用halcon專用的標定板?問題2:halcon標定板如何生成?問題3:halcon標定板如何擺放,拍照數量有無限制?標定步…

halcon模板匹配干擾邊緣消除辦法(最硬核方式)

目錄halcon手繪形狀匹配模板手繪形狀匹配模板主要算子解析draw_nurbs 繪制平滑曲線參數解釋create_shape_model_xld 使用XLD輪廓創建模板參數解釋實例演示與解析實例代碼展示與解析運行過程與處理展示讀入圖像繪制模板使用繪制的XLD創建模板查找模板博主寫作不容易,…

往文件中寫數據--增量

有的功能需要打印日志文件,但是日志文件太多不方便查看,我就把信息輸出到一個TXT文件中了。 下面就是我將要說的,往文件中寫數據(增量),代碼很簡單,也可以放在你的代碼中運行一下: /…

SQL Server 數據庫查找重復記錄的幾種方法

http://www.hanyu123.cn/html/c61/6790.html 一、查某一列(或多列)的重復值。(只可以查出重復記錄的值,不能查出整個記錄的信息) 例如:查找stuid,stuname重復的記錄: select stuid,s…

xvid 數據編碼和解碼

由于視頻開發的需求,封裝xvid c調用接口,使之優雅易用 我已經對pc camera視頻流(RGB)進行嘗試,編碼之后傳輸到遠程主機進行解碼回放,效果不錯 具體的xvid的參數可以進一步優化,這里只是提供簡單的范例 1. xvid 解碼 …

第一個PowerShell腳本——PowerShell三分鐘(九)

前面把基礎知識講了一遍,現在我們開始寫一個最初級的腳本寫腳本的工具有很多,有文本文檔,有PowerShell ISE,PowerShell Studio等,這里選用系統自帶的PowerShell ISE這里大家依然要記得以管理員身份運行,否則…

C#精準定時

文章目錄簡介StopWatch類例子1,用作延時例子2,用作算法耗時評估博主寫作不容易,孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 簡介 我們在自動化上位機編寫過程中,上位機的定時應用在很多地方。對于工業上位機程序設計起…

聯合體(union)和結構體(struct)的區別

1. 聯合說明和聯合變量定義 聯合也是一種新的數據類型, 它是一種特殊形式的變量。 聯合說明和聯合變量定義與結構十分相似。其形式為: union 聯合名{ 數據類型 成員名; 數據類型 成員名; ... } 聯合變量名; 聯合表示幾個變量公用一個內存位置, 在不同的時間保存不同…

MVC架構簡介及其測試策略

最近在WEB端測試工作中陷入了瓶頸,單純的手動功能測試在沒有成熟的代碼規范之前還是很容易坑的,WEB自動化測試一時半會還沒有什么進展,所以決定先學習一下網站用的MVC架構,跟著教程寫了一個小網站,大概也找到了WEB測試…

prototype與_proto_

1、prototype與_proto_ ①prototype:是函數才有的屬性,這個屬性是一個指針。當一個構造函數被創建時,該構造函數會自動生成一個prototype指針,該指針指向構造函數的原型。這個原型會有其他實例共享的一些屬性和方法。 ②_proto_&a…

Halcon求取矩形頂點坐標

文章目錄簡介Halcon源碼博主寫作不容易,孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 簡介 我們在使用Halcon畫矩形時,并不能得到矩形四角頂點坐標。但是我們可以通過數學計算得到矩形定點坐標的位置。 我們在計算過程中需要知道矩形的長軸與短…

kafka常用的shell命令

kafka常用shell命令: ------------------------------------ 1、創建topic bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test 2、查看創建的topic bin/kafka-topics.sh --list --zookeeper localhost:…

python+pycharm+Django報錯

報錯&#xff1a; Unhandled exception in thread started by <function wrapper at 0x2d7e410>Traceback (most recent call last):File "/root/virtual_dir/wxwebapp_court_nositepkg/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, i…

C++多線程實例(_beginThreadex創建多線程)

C多線程&#xff08;二&#xff09;(_beginThreadex創建多線程) C/C Runtime 多線程函數一 簡單實例&#xff08;來自codeprojct&#xff1a;http://www.codeproject.com/useritems/MultithreadingTutorial.asp&#xff09; 主線程創建2個線程t1和t2&#xff0c;創建時2個線程…

halcon求取區域頂點

文章目錄簡介Halcon源代碼處理效果博主寫作不容易&#xff0c;孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 簡介 使用halcon求取頂點的方法。 Halcon源代碼 read_image (Image1, 1.png)points_foerstner (Image1, 1, 2, 3, 200, 0.3, gauss, false, RowJunctions, …

從excel表中生成批量SQL,將數據錄入到數據庫中

excel表格中有許多數據&#xff0c;需要將數據導入數據庫中&#xff0c;又不能一個一個手工錄入&#xff0c;可以生成SQL&#xff0c;來批量操作。1.首先在第二行的H列&#xff0c;插入函數&#xff1a;CONCATENATE("INSERT INTO book (bookid, title, volume, author, u…

HDU-5895 Mathematician QSC

題目大意&#xff1a; 已知f[0] 0, f[1] 1, f[i] f[i-1] * 2 f[i-2]&#xff0c;且g[n] g[n-1] f[n] * f[n]&#xff0c;現在給出n&#xff0c;y&#xff0c;x&#xff0c;s&#xff0c;問你x^(g[n*y]) mod (s 1)的值為多少。 解題思路&#xff1a; 首先可以得到的是g[n…

C#的兩種類據類型:值類型和引用類型

目錄什么是值類型&#xff0c;什么是引用類型概念&#xff1a;值類型和引用類型區別什么是值類型&#xff0c;什么是引用類型 概念&#xff1a; 值類型直接存儲其值&#xff0c;而引用類型存儲對其值的引用。部署&#xff1a;托管堆上部署了所有引用類型。 引用類型&#xf…