1. 程式人生 > >matlab和C/C++混合程式設計--Mex (六)引數傳遞

matlab和C/C++混合程式設計--Mex (六)引數傳遞

最近的專案需要matlab和C的混合程式設計,經過一番努力終於完成了專案要解決的問題。現在就將Mex的一些經驗總結一下,當然只是剛剛開始,以後隨著學習的深入繼續新增。首先講講寫Mex的一些常規規定,然後我們會重點關注混合程式設計中最難解決資料的問題--結構到底如何轉換,並且後面會重點說一下自己的程式。

一、Mex的結構

先看一個簡單的程式(該程式儲存在matlab主目錄下名字是mexDemon.cpp,或者在主目錄下新建一個.cpp檔案):

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #include "mex.h"  //加入標頭檔案,該標頭檔案在VS2010中無法include,但是不影響其在matlab中的編譯,反而在matlab編譯還需要include它 #include <vector> using namespace std; void mexFunction(int nlhs, mxArray *plhs[],int nrhs,const mxArray *prhs[]) //mexFunction就類似於main函式 { //nlhs代表的是輸出引數的個數 //plhs是一個指標陣列,裡面的指標指向mxArray型別,每一個指標指向一個輸出
//nrhs代表的是輸入引數的個數 //prhs是一個指標陣列,裡面的指標指向mxArray型別,每一個指標指向一個輸入   vector<vector<double> > array2d; double *z; plhs[0] = mxCreateDoubleMatrix( 5, 6, mxREAL);//第一個輸出是一個5*6的矩陣 z = mxGetPr(plhs[0]);//獲得矩陣的第一個元素的指標 array2d.resize(5); int ii = 0; for(int i = 0; i < 5; i++){
for(int j = 0; j < 6; j++){ z[i*6 + j] = ii; //指標訪問矩陣是列優先的,請自己迴圈程式和分析輸出結果 ii++; } }

相關推薦

matlabC/C++混合程式設計--Mex 引數傳遞

最近的專案需要matlab和C的混合程式設計,經過一番努力終於完成了專案要解決的問題。現在就將Mex的一些經驗總結一下,當然只是剛剛開始,以後隨著學習的深入繼續新增。首先講講寫Mex的一些常規規定,然後我們會重點關注混合程式設計中最難解決資料的問題--結構到底如何轉換

C#基礎知識-引用類型值類型的區別

值類型 type 調用 執行 new 內存堆 ada ont 不同類 在第一篇中我們介紹了C#中基本的15種數據類型,這15種數據類型中又分為兩大類,一種是值類型,一種是引用類型。值類型有sbyte、short、long、int、byte、ushort、uint、u

C程式設計語言UNIX系統介面

系統介面和標準的C庫,是不同的兩個範疇。 標準C庫,各個平臺的C編譯器都應該支援,具有跨平臺的性質。 系統介面則是系統相關的,UNIX的系統介面,在Win上就肯定不能用。 那麼兩者是不是還有聯絡呢,其實是的。標準C庫,跟系統相關的部分,不也是通過系統呼叫/系統介面實現的麼。所以系

C/C++ 泛型程式設計vector排序

題目描述 對一組輸入的資料(0結束)進行排序輸出。 約定:所有的輸入資料都為正整數,且都不大於100000。 輸入 包括多組測試資料。 每組以0結尾。 輸出  每組輸出1行。輸出排序後的資料(不含0)。 樣例輸入 1 2 3 2 4 0 5 6 2 2 0

C++11 併發程式設計基礎:併發、並行與C++多執行緒

正文 C++11標準在標準庫中為多執行緒提供了元件,這意味著使用C++編寫與平臺無關的多執行緒程式成為可能,而C++程式的可移植性也得到了有力的保證。另外,併發程式設計可提高應用的效能,這對對效能錙銖必較的C++程式設計師來說是值得關注的。 回到頂部 1. 何為併發 併發指的是兩個或多個獨立的活動在同

c++ 網絡編程TCP/IP LINUX下 socket編程 多播與廣播 實現一次發送所有組客戶端都能接收到

send all users 代碼示例 proto 次數 不可 的人 ssa 原文作者:aircraft 原文鏈接:https://www.cnblogs.com/DOMLX/p/9614288.html 一.多播 鍥子:有這麽一種情況,網絡電臺可能需要同時向成

Java的繼承與記憶體結構——有C++基礎的Java入門

目錄 一、 繼承概念 1、語法 2、 例項  3、 總結 二、 繼承的記憶體結構 一、 繼承概念 繼承是面向物件最顯著的一個特性。繼承是從已有的類中派生出新的類,新的類能吸收已有類的資料屬性和行為,並能擴充套件新的能力。 通俗一點:描述事物的時候,如

c語言數字影象處理:二維離散傅立葉變換

基礎知識 複數表示 C = R + jI 極座標:C = |C|(cosθ + jsinθ) 尤拉公式:C = |C|ejθ 有關更多的時域與複頻域的知識可以學習複變函式與積分變換,本篇文章只給出DFT公式,性質,以及實現方法 二維離散傅立葉變換(DFT) 其中f(x,y)為原影象,F(u,

C for Graphic:語言

        之前我們依次學習了vertex頂點和fragment片段函式分別能做些什麼事情,這次我們就綜合一下,實現一個帶有vertex頂點和fragment片段函式的完整的CG shader看下效果。         比如我喜歡看書,特別是“物理學”和“心理學”的

C語言基礎 入門學習

1.如何大小端轉換 bool IsBig() { int sh = 0x12345678; char*p = (char*)&sh; if (*p == 0x78) { return false; } return true; } int

資料結構程式設計回顧.學生成績管理系統-冒泡、快排、希爾、雙向冒泡堆排

題目六:學生成績處理系統 設計要求:本設計要求採用順序儲存結構,實現關於學生成 績處理的相關問題,包括:學生資訊的錄入、查詢、修改、 排序、確定名次以及資訊的輸出。其中學生資訊包括:學號、 姓名、四門課、總分以及排名;排序方法包括:雙向冒泡排 序、希爾排序、快速排序、堆排序等方法。 選單內容:

Java程式設計思想—— 訪問許可權控制

一、包:庫單元         包內含有一組類,它們在單一的名字空間下被組織在了一起。例如,在Java的標準釋出中有一個工具庫,它被組織在java.util名字空間下,如果要使用此名字空間下的ArrayList類,可以使用其命名的方式,如下: pu

Java程式設計思想第19章-列舉型別

目錄: 19.4 values()的神祕之處   通過反編譯列舉類,values()是由編譯器新增的static()方法。編譯器將列舉類(enum)標記為final類,所以enum類無法被繼承。 19.5 實現而非繼承   所有的enum類都繼承自java.lan

網路程式設計 筆記 多程序伺服器

程序 - 程序(Process):“佔用記憶體空間的正在執行的程式” - 程序ID :作業系統給程序分配的id,其值大於2,1要分配給作業系統啟動後的首個程序 -linux檢視程序的命令:ps au ;引數a和u列出所有程序的詳細資訊 通過fo

MapReduce程式設計例項

package com.t.hadoop; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import

javascript高階程式設計筆記

day 06 作為值的函式 從一個函式返回另一個函式,是一種極為有用的技術。可用於陣列物件進行排序。如下函式:function createComparisonFunction(propertyName) { return function(object1,object

WEB開發者之混合開發APP, 下拉重新整理

下拉重新整理,本文只介紹下拉重新整理重置頁面的情況。同上一篇博文一樣,筆者介紹兩種形式的下拉重新整理方法。 1. mui下拉重新整理 1.1 相對固定的頁面結構 <div id="pullrefresh" class="mui-conte

Linux下的socket程式設計實踐Unix域協議和socketpair傳遞檔案描述符

UNIX域協議並不是一個實際的協議族,而是在單個主機上執行客戶/伺服器通訊的一種方法,所用API與在不同主機上執行客戶/伺服器通訊所使用的API相同。UNIX域協議可以視為IPC方法之一,Unix域協

演算法入門總結—— 引數傳遞

函式在演算法競賽中是不可避免的一部分,使用函式必然存在引數傳遞的問題,在C語言中,引數傳遞有傳值、傳地址、傳陣列、傳函式等方式。 傳值 直接在引數表將變數傳入即可,不會改變該變數的值 傳地址 將

matlabc++混合程式設計---Mex結構mexFunction引數傳遞

最近的專案需要matlab和C的混合程式設計,經過一番努力終於完成了專案要解決的問題。現在就將Mex的一些經驗總結一下,當然只是剛剛開始,以後隨著學習的深入繼續新增。首先講講寫Mex的一些常規規定,然後我們會重點關注混合程式設計中最難解決資料的問題--結構到底如何轉換