1.dll函數的導入:
關鍵字:unmanaged code ; managed code;
具體應用類:System.Runtime.InteropServices
具體使用方法:
[DllImport("muParser.dll", EntryPoint = "mupSetExpr", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern void mupSetExpr(void* parser_handle, StringBuilder a_szExpr);
注意點:EntryPoint 同函數名 CharSet 注意 不要輕易使用 uncode.
函數參數 要使用指針時 應該使用 unsafe
2.函數指針的使用:
關鍵字:delegate
具體使用方法:
c++: typedef double (*fun_type1)(double);
c#:public delegate double fun_type1(double);
注意點:c#使用委托 方法,實現函數指針,使用時 c++中的指針去掉
參數定義很c++一樣
3.定義指針值
關鍵字:fixed
具體使用說明:主要是想返回指針地址,c#中好像不支持 &(可能不准確)
直接給指針賦值也不行
example:
public double* AddVariable()
{
fixed ( double * ptrVar = &afValBuf )
{
return ptrVar;
}
}
說明:相關這個指針變量都要在 fixed 裡面
4.關於c++函數參數是 char* 的操作
關鍵字:StringBuider
具體使用說明:c++中參數char*操作是 一個字節一個字節讀取的,
c#中的String 是 兩個字節讀取的 所以不能用
所以只用StringBuilder替代
現在還沒有找到更好的方法,如果有的話告之
5.關於dll的導入
如果c++中dll 不是組件形式(或者COM),那麼不能直接通過.NET的reference 直接應用
我的解決方法:
應用平台:.net website
方法: 建立ClassLibrary 將要應用的dll放在bin下 然後編譯工程 使用新生成的dll 就可以了
6.關於c#中使用指針:
關鍵字:unsafe
使用方法:在需要使用指針的地方 加 unsafe
while((c=getchar())!='\n')
這句呀
你可以理解為
當系統函數getchar在讀入字符時
未出現換行
即回車
則循環不斷
if((c>='a' && c<='z')||(c>='A' && c<='Z'))
這句是if的大條件
你所輸入的字符必須滿足26個字母中的一個
大小寫不限
至於最後一個問題
我有點暈了
我就搞不懂LZ為什麼就和V干上了
if (c>'Z' && c<='Z'+4||c>'z')
這句相當於是if((c>='a' && c<='z')||(c>='A' && c<='Z'))的else if語句鏈的第二個條件
break語句
break語句通常用在循環語句和開關語句中。當break用於開關語句switch中時,可使程序跳出switch而執行switch以後的語句;如果沒有break語句,則將成為一個死循環而無法退出。break在switch 中的用法已在前面介紹開關語句時的例子中碰到,這裡不再舉例。
當break語句用於do-while、for、while循環語句中時,可使程序終止循環而執行循環後面的語句, 通常break語句總是與if語句聯在一起。即滿足條件時便跳出循環。
注意:
1) break語句對if-else的條件語句不起作用。
2) 在多層循環中, 一個break語句只向外跳一層。
對於你的問題,就是跳出for循環,執行循環後面的語句,即str[i++] = '.';語句