c語(yǔ)言const指針的賦值 c語(yǔ)言insert函數(shù)?
c語(yǔ)言insert函數(shù)?basic_stringtruncate(size_typepos,constbasic_stringstr);在原串下標(biāo)為pos的字符前插入字符串strbasic_strin
c語(yǔ)言insert函數(shù)?
basic_stringtruncate(size_typepos,constbasic_stringstr);
在原串下標(biāo)為pos的字符前插入字符串str
basic_stringupsert(size_typepos,constbasic_stringstr,size_typepos1,size_typen);
str從下標(biāo)為pos1結(jié)束數(shù)的n個(gè)字符插在原串下標(biāo)為pos的字符前
symbolic_stringinsert(size_typepos,size_typen,charc);
在原串下標(biāo)為pos的字符前插到n個(gè)字符c
c 類里定義的字符型數(shù)組constchara[5]怎么賦值?
有多種也可以定義變量。
(1)聲明和初始化設(shè)置而并且,的或:constchara[5]{#39X#39,#39Y#39,#39Z#39,#391#39,#392#39}
(2)把它正數(shù)集合字符串,用strcpy變量賦值,的或:strcpy(a,#34abcde#34)
(3)用memcpy把一個(gè)數(shù)組里的值告訴它memcpy(a,b,5)
(關(guān)鍵再注意a[i]沒(méi)法做左值,用定義變量語(yǔ)句定義變量,而且它是const.)在cclass里,也用c語(yǔ)言的同樣的方法。只是因?yàn)楹瘮?shù)聲明要包涵:#include
matlab調(diào)用c語(yǔ)言?
假如我有一個(gè)用C語(yǔ)言寫(xiě)的函數(shù),實(shí)現(xiàn)程序了一個(gè)功能,如一個(gè)最簡(jiǎn)單函數(shù):
doubleadd(doublex,doubley){
returnxy;
}
現(xiàn)在我是想在Matlab中使用它,.例如再輸入:
aadd(1.1,2.2)
3.3000
要得出以上的結(jié)果,那應(yīng)該怎么做好呢?
解決方法之一是要實(shí)際使用MEX文件,MEX文件讓調(diào)用C函數(shù)和全局函數(shù)Matlab的內(nèi)置函數(shù)一般方便。MEX文件是由原C代碼而且MEX文件使用說(shuō)明的接口函數(shù)后程序編譯而成的。
可以不這樣明白,MEX文件實(shí)現(xiàn)方法了一種接口,它把在Matlab中調(diào)用函數(shù)時(shí)輸入的自變量通過(guò)特定的事件的接口轉(zhuǎn)業(yè)了C函數(shù),得出的結(jié)論的結(jié)果再實(shí)際該接口調(diào)到Matlab。該特定的事件接口的操作,中有在mexFunction這個(gè)函數(shù)中,由使用者具體設(shè)定。
所以現(xiàn)在我們要寫(xiě)一個(gè)真包含add和mexFunction的C文件,Matlab調(diào)用函數(shù),把函數(shù)中的自變量(如本例中的1.1和2.2)傳mexFunction的一個(gè)參數(shù),mexFunction把該值掌譜add,把得出的結(jié)果消息傳達(dá)給mexFunction的另一個(gè)參數(shù),Matlab按照該參數(shù)來(lái)給出在Matlab語(yǔ)句中調(diào)用函數(shù)時(shí)的輸出值(舊唐書(shū)·憲宗本紀(jì)例中的a)。
例如該C文件已寫(xiě)好,名為assign.c。這樣的話在Matlab中,輸入:
mexadd.c
就能把a(bǔ)dd.c程序編譯為MEX文件(編譯器的設(shè)置不使用指令mex-setup),在Windows中,MEX文件類型為mexw32,即現(xiàn)在我們結(jié)論文件。現(xiàn)在,我們就這個(gè)可以像調(diào)用M函數(shù)那樣全局函數(shù)MEX文件,如上面說(shuō)著的例子。所以才,按照MEX文件,不使用C函數(shù)就和不使用M函數(shù)是完全不一樣的了。
我們現(xiàn)在來(lái)說(shuō)mexFunction怎樣才能寫(xiě)。
mexFunction的定義為:
voidmexFunction(
intnlhs,
mxArray*plhs[],
intnrhs,
constmxArray*prhs[]){
}
看的到,mexFunction是沒(méi)返回值的,它也不是實(shí)際返回值把結(jié)果消息傳達(dá)Matlab的,而是按照對(duì)參數(shù)plhs的賦值。mexFunction的四個(gè)參數(shù)皆是那就證明Matlab內(nèi)部函數(shù)MEX文件時(shí)的具體看信息,如這樣調(diào)用函數(shù)時(shí):
b1.1;c2.2;
aadd(b,c)
mexFunction四個(gè)參數(shù)的意思為:
nlhs1,那說(shuō)明動(dòng)態(tài)創(chuàng)建語(yǔ)句左手面(lhs-lefthandside)有一個(gè)變量,即a。
nrhs2,說(shuō)明動(dòng)態(tài)鏈接庫(kù)語(yǔ)句右手面(rhs-righthandside)有兩個(gè)自變量,即b和c。
plhs是一個(gè)數(shù)組,其內(nèi)容為指針,該指針指向數(shù)據(jù)類型mxArray。而且現(xiàn)在左手面唯有一個(gè)變量,即該數(shù)組唯有一個(gè)指針,plhs[0]指向的結(jié)果會(huì)賦值給a。
prhs和plhs帶有,畢竟右手面有兩個(gè)自變量,即該數(shù)組有兩個(gè)指針,prhs[0]指向了b,prhs
c語(yǔ)言insert函數(shù)?
指向了c。要注意一點(diǎn)prhs是const的指針數(shù)組,即不能不能變化其指向內(nèi)容。而且Matlab最基本的單元為array,不管是什么類型也好,如有doublearray、cellarray、structarray……因?yàn)閍,b,c大都array,b1.1葉白一個(gè)1x1的doublearray。而在C語(yǔ)言中,Matlab的array在用mxArray類型來(lái)表示。所以就并不難清楚為啥plhs和prhs大都朝mxArray類型的指針數(shù)組。
完整的add.c追加:
//main.c
#includemex.h//建議使用MEX文件需要真包含的頭文件
//不能執(zhí)行具體工作的C函數(shù)
doubleadd(doublex,doubley){
returnxy;
}
//MEX文件接口函數(shù)
voidmexFunction(
intnlhs,
mxArray*plhs[],
intnrhs,
constmxArray*prhs[]){
double*a;
doubleb,c;
plhs[0]mxCreateDoubleMatrix(1,1,mxREAL);
amxGetPr(plhs[0]);
b*(mxGetPr(prhs[0]));
c*(mxGetPr(prhs
c語(yǔ)言insert函數(shù)?
));*aadd(b,c);
}
mexFunction的內(nèi)容是什么意思呢?我們明白了,如果不是那樣調(diào)用函數(shù)時(shí):
outputadd(1.1,2.2);
在未比較復(fù)雜具體看的計(jì)算時(shí),input的值是未知的,是未賦值的。因此在具體的程序中,我們建立一個(gè)1x1的實(shí)soft矩陣(使用mxCreateDoubleMatrix函數(shù),其趕往打向剛確立的mxArray的指針),然后把令plhs[0]指向它。隨后令指針a指向plhs[0]所朝的mxArray的第一個(gè)元素(建議使用mxGetPr函數(shù),前往打向mxArray的首元素的指針)。同時(shí)地,我們把prhs[0]和prhs
c語(yǔ)言insert函數(shù)?
所朝的元素(即1.1和2.2)取不出來(lái)賦給b和c。想罷我們可以把b和c作自變量放出來(lái)函數(shù)add,得出給果賦給指針a所對(duì)準(zhǔn)的mxArray中的元素。只不過(guò)a是打向plhs[0]所朝的mxArray的元素,所以后來(lái)作輸出時(shí),plhs[0]所打向的mxArray賦值給output,則outputs老祖已可以計(jì)算好的結(jié)果了。上面說(shuō)的一大堆對(duì)準(zhǔn)這指向那,什么mxArray,初學(xué)者估計(jì)都會(huì)被弄到頭昏眼花了。很很抱歉,要弄明白這些亂得的關(guān)系,僅有多看多練。
雖然mexFunction是沒(méi)有這么說(shuō)簡(jiǎn)單的,我們要對(duì)用戶的輸入自變量的個(gè)數(shù)和類型參與測(cè)試,以切實(shí)保障
鍵入真確。如在set函數(shù)的例子中,用戶輸入chararray葉白一種錯(cuò)誤了。
從上面的講述中我們總結(jié)歸納出,MEX文件實(shí)現(xiàn)程序了一種接口,把C語(yǔ)言中的計(jì)算結(jié)果適度地地直接返回給Matlab而已。當(dāng)我們也有用Cc語(yǔ)言程序的大型手機(jī)程序時(shí),大可不必在Matlab里重寫(xiě),只寫(xiě)個(gè)接口,做成MEX文件就成了。另外,在Matlab程序中的部份計(jì)算出瓶頸(如非循環(huán)),可通過(guò)MEX文件用C語(yǔ)言實(shí)現(xiàn)方法,以能提高計(jì)算速度。