青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

xyjzsh

猜猜執行結果

static const char *msg[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
char *get_a_day(int idx)
{
 static char buf[20];
 strcpy(buf, msg[idx]);
 return buf;
}

int main()
{
 char *day0 = get_a_day(0);
 char *day1 = get_a_day(1);
 printf("%s %s\n", day0, day1);
 return 0;
}

結果是什么?

posted @ 2011-07-20 13:52 呆人 閱讀(224) | 評論 (0)編輯 收藏

error C3872: “0x3000”: 此字符不允許在標識符中使用——快速處理方法

在從別處拷貝代碼到IDE時經常出現這類問題。出現問題的原因是:存在中文符號,一般為全角下的中文空格。
為了快速出來這里錯誤,可以先把要拷貝的代碼拷貝到word中,用查找替換工具,將所有的全角下的空格,替換為英文下的半角空格。

在vs2008中可以直接用它自帶的查找替換功能。

posted @ 2011-05-17 14:52 呆人 閱讀(1576) | 評論 (0)編輯 收藏

matlab生成dll后在vc中脫離matlab環境執行

在沒有安裝matlab的機器上,要想運行matlab的dll要必須安裝MCR環境。
在安裝了matlab的機器上,在 MATLAB\R2010b\toolbox\compiler\deploy\win32下面有MCR 的安裝程序。
在安裝了MCR的機器上,就可以運行使用了matlab的dll的VC的可執行文件。

posted @ 2011-05-16 16:05 呆人 閱讀(1596) | 評論 (0)編輯 收藏

matlab生成dll后在vc中脫離matlab環境執行

在沒有安裝matlab的機器上,要想運行matlab的dll要必須安裝MCR環境。
在安裝了matlab的機器上,在 MATLAB\R2010b\toolbox\compiler\deploy\win32下面有MCR 的安裝程序。
在安裝了MCR的機器上,就可以運行使用了matlab的dll的VC的可執行文件。

posted @ 2011-05-16 16:05 呆人 閱讀(463) | 評論 (0)編輯 收藏

vs2008中調用matlab生成的dll

matlab版本為:matlab7.11.0(R2010b)
vs2008

1.在matlab中生成dll

在m文件中實現如下功能:
獲得N個魔方矩陣的秩。m文件的內容如下:
function r = mrank(n)

r = zeros(n,1);
for k=1:n
    r(k) = rank(magic(k));
end

將上述內容保存為:mrank.m


在matlab的command 窗口鍵入:
>> mcc -B csharedlib:mrank mrank.m %該命令將在后面做說明

在matlab7.0中執行上述命令后生成下面幾個文件:
mrank.exp    mrank.exports   mrank.h   mrank.lib  mrank.c     mrank.dll  

在vs2008中使用m文件的函數功能。
首先配置vs2008的環境
1.工具——> 選項——>項目和解決方案——>VC++目錄
(1) 選擇“可執行文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\bin\win32(注意:當前的Mathlab安裝在C:\Program Files下面)
(2)選擇“包含文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\extern\include
(3)選擇“引用文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\extern\lib
(4)選擇“庫文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\extern\lib\win32\microsoft
上述環境只需要配置一次

對于每一個工程,做下面的設置
項目——>屬性——>連接器——>輸入
選擇:附加依賴項:添加:
libmex.lib
libmx.lib
libmat.lib
mclmcrrt.lib

將mrank.h  mrank.lib  mrank.dll拷貝到當前目錄下
cpp文件中中的內容如下:
#include "stdafx.h"
#include<stdlib.h>
#include"matrix.h"
#include"mrank.h"
#include "mclmcrrt.h"
#pragma comment(lib,"mrank.lib")

int main()
{
  mxArray *N(NULL),*R(NULL);
 int n =12;

 mrankInitialize();//初始化動態鏈接庫
 N = mxCreateDoubleScalar(n);//用n來初始化生成的數組,其實標量就是一個1*1的數組
 mlfMrank(1,&R,N);//執行m文件的主要功能
 
 size_t num = mxGetM(R);//R的行的個數
 double *res = new double[num];
 memset(res,0,sizeof(double)*num);

 memcpy(res,mxGetPr(R),sizeof(double)*num);

 for(int i=0;i<num;++i)
  printf("%f\n",res[i]);

 delete[] res;
 mxDestroyArray(N);
 mxDestroyArray(R);
 
 mrankTerminate();//終止動態數據連接
return 0;
}

上述cpp文件使用了Matlab編譯m文件生成的dll,在cpp中通過mxArray這個數據結構來和dll中的方法進行信息交換。
這樣就在cpp中調用了matlab中的m文件實現的方法。

mcc命令說明:
http://www.cnblogs.com/juneja/archive/2008/10/31/1323423.html

posted @ 2011-05-12 17:28 呆人 閱讀(4605) | 評論 (0)編輯 收藏

返回值為函數指針的寫法

下面方法的作用是:通過key的類型返回對應的哈希函數的指針

static int (*hashFunction(int keyClass))(const void*,int)
{
/*內容省略*/
}

函數的名字是:hashFunction,該函數為只有1個int型參數為。
該函數的返回值為一個函數指針,函數有2個參數,第一個類型為const void*,第二個為int,返回值為int 。

posted @ 2011-04-26 15:36 呆人 閱讀(715) | 評論 (0)編輯 收藏

c語言中模擬動態綁定

struct本身不能支持動態綁定,為了實現統一接口,我們希望實現動態綁定。
例如在不同的操作系統下,對文件的操作是不同,但是我們希望統一結構,有如下結構
struct OSFile
{
    PIOMethod pMethods;
   /*
   其他信息
  */
};

struct WinOSFile
{
PIOMethod pMethods;
..........
};

struct UnixOSFile
{
PIOMethod pMethods;
..........
};

有如下方法:
void UniAPI(OSFile *file);
為了實現動態綁定,做法是在調用該方法之前,將WinOSFile或者UnixOSFile的pMethods賦給OSFile的pMethods從而實現動態綁定。

posted @ 2011-04-26 15:30 呆人 閱讀(533) | 評論 (0)編輯 收藏

按位使用數據以及union

例如:
typedef union tagData
{
   long x:2;
   long y:4;
   long data;
}data_item,*pdata_item;

上述是一個聯合體,聯合體的對象用的空間是類型中占用內存最大的哪個,例如上例中data_item變量占用4個字節。
long x:2;
表示x占用2bit
long y:4;
表示y占用4bit
long data;
data占用4byte
所以上述union占用4byte空間。
long s=sizeof(data_item);
s=4;

因為x,y,data公用內存空間。
從低位開始,即
x占用空間的低2bit,即0-1
y占用空間2~5bit
x,y都是可以是有符號的,相對最高位表示符號位。
例如,
item_data t={0};
(1) t.data = 2;
2表示成二進制位10.
所以t.x 的值為-2;
(2) t.data = 3;
3表示成二進制位11
所以t.x的值為-1
(3) t.data =1;
此時t.x的值為1

t.y的取值的道理同t.x;
對于t.y來說第5位表示正負號。



posted @ 2011-03-15 17:34 呆人 閱讀(588) | 評論 (0)編輯 收藏

宏定義中字符串連接操作

宏定義中字符串連接操作

關于記號粘貼操作符(token paste operator): ##

1. 簡單的說,“##”是一種分隔連接方式,它的作用是先分隔,然后進行強制連接

   其中,分隔的作用類似于空格。我們知道在普通的宏定義中,預處理器一般把空格
   解釋成分段標志
,對于每一段和前面比較,相同的就被替換。但是這樣做的結果是,
   被替換段之間存在一些空格。如果我們不希望出現這些空格,就可以通過添加一些
   ##來替代空格

   另外一些分隔標志是,包括操作符,比如 +, -, *, /, [,], …,所以盡管下面的
   宏定義沒有空格,但是依然表達有意義的定義: define add(a, b)  a+b

   而其強制連接的作用是,去掉和前面的字符串之間的空格,而把兩者連接起來。

2. 舉列 – 試比較下述幾個宏定義的區別

   #define A1(name, type)  type name_##type##_type 或
   #define A2(name, type)  type name##_##type##_type

   A1(a1, int);  /* 等價于: int name_int_type; */
   A2(a1, int);  /* 等價于: int a1_int_type;   */

   解釋:
        1) 在第一個宏定義中,”name”和第一個”_”之間,以及第2個”_”和第二個
   ”type”之間沒有被分隔,所以預處理器會把name_##type##_type解釋成3段:
   “name_”、“type”、以及“_type”,這中間只有“type”是在宏前面出現過
    的,所以它可以被宏替換。

        2) 而在第二個宏定義中,“name”和第一個“_”之間也被分隔了,所以
   預處理器會把name##_##type##_type解釋成4段:“name”、“_”、“type”
   以及“_type”,這其間,就有兩個可以被宏替換了。

        3) A1和A2的定義也可以如下:
           #define A1(name, type)  type name_  ##type ##_type  
                                      <##前面隨意加上一些空格>
           #define A2(name, type)  type name ##_ ##type ##_type

    結果是## 會把前面的空格去掉完成強連接,得到和上面結果相同的宏定義

3. 其他相關 – 單獨的一個 #

   至于單獨一個#,則表示 對這個變量替換后,再加雙引號引起來。比如

      #define  __stringify_1(x)   #x
那么
      __stringify_1(linux)   <==>  ”linux”

所以,對于MODULE_DEVICE_TABLE

     1) #define MODULE_DEVICE_TABLE(type,name)                        
             MODULE_GENERIC_TABLE(type##_device,name)
     2) #define MODULE_GENERIC_TABLE(gtype,name)                      
             extern const struct gtype##_id __mod_##gtype##_table     
             __attribute__ ((unused, alias(__stringify(name))))

得到  
      MODULE_DEVICE_TABLE(usb, products)  
                             /*notes: struct usb_device_id products; */
 <==> MODULE_GENERIC_TABLE(usb_device,products)
 <==> extern const struct usb_device_id __mod_usb_device_table     
             __attribute__ ((unused, alias(“products”)))   

注意到alias attribute需要一個雙引號,所以在這里使用了__stringify(name)來
給name加上雙引號。另外,還注意到一個外部變量”__mod_usb_device_table”被alias
到了本驅動專用的由用戶自定義的變量products<usb_device_id類型>。這個外部變量
是如何使用的,更多的信息請參看《probe()過程分析》。

4. 分析方法和驗證方式 – 編寫一個簡單的C程序

   用宏定義一個變量,同時用直接方式定義一個相同的變量,編譯報告重復定義;
   用宏定義一個變量,直接使用該宏定義的變量名稱,編譯通過且運行結果正確;

posted @ 2011-03-15 13:49 呆人 閱讀(4568) | 評論 (0)編輯 收藏

虛擬指針的問題——memset相關


class Node
{
  
public:
Node(
void){}
~Node(void){}
virtual bool IsLeafNode()=0;

}
;
class InternalNode:public Node
{
public:
InternalNode()
{}
virtual ~InternalNode(void){}
virtual bool IsLeafNode(){return false;}
}
;

class LeafNode:public Node
{
public:
LeafNode()
{}
virtual ~LeafNode(){}
virtual bool IsLeafNode(){return true;}
}
;


定義以上的繼承結構:LeafNode和InternalNode繼承自Node
有一個虛方法IsLeaf來判斷是否為葉子節點。
下面有這樣的測試代碼:
test()
{
   Node *node = new InternalNode();
   memset(node,0,sizeof(InternalNode));
   node->IsLeafNode();
}
上述代碼編譯正常,而運行時出錯!
出現上述問題的原因是:
對于有虛函數的類,每一個類有一個虛函數表,而每一個對象中會有一個指針指向這個虛函數表。
當   Node *node = new InternalNode();時編譯器會把一個指針知道InternalNode的虛函數表
但是memset(node,0,sizeof(InternalNode));卻把這個指針設成了。
所以在調用的時候出現了運行時錯誤!

posted @ 2011-03-14 15:46 呆人 閱讀(461) | 評論 (0)編輯 收藏

僅列出標題
共6頁: 1 2 3 4 5 6 
<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

導航

統計

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            伊人久久成人| 久久国产毛片| 久久精品99国产精品酒店日本| 亚洲国产一区二区三区a毛片| 黄色av日韩| 最新日韩在线视频| 99re这里只有精品6| 亚洲免费av网站| 一本色道久久综合精品竹菊| 欧美福利在线| 久久久一二三| 亚洲国产精品999| 麻豆久久久9性大片| 欧美激情一区二区三区在线视频| 亚洲国产成人精品久久| 亚洲免费av电影| 午夜精品一区二区三区在线| 久久久综合香蕉尹人综合网| 欧美人妖在线观看| 国产精品视频久久| 亚洲国产精品传媒在线观看| 中文国产一区| 免费成人在线观看视频| 亚洲精品护士| 久久精品亚洲一区| 欧美日韩一区视频| 亚洲福利精品| 欧美一区二区视频在线| 欧美激情bt| 亚洲欧美综合网| 欧美日韩高清在线观看| 黄色日韩网站| 午夜国产精品影院在线观看| 农夫在线精品视频免费观看| 中日韩美女免费视频网址在线观看| 久久精品综合| 国产精品亚洲产品| a4yy欧美一区二区三区| 久久综合五月| 午夜老司机精品| 欧美亚洲第一页| 亚洲精品日韩精品| 欧美91大片| 久久精品日产第一区二区三区| 国产精品vvv| 99视频一区二区三区| 久久影院午夜片一区| 亚洲一二三区精品| 欧美日韩久久不卡| 日韩视频在线观看国产| 男女av一区三区二区色多| 欧美一级专区| 国产日韩欧美在线观看| 亚洲一区区二区| 亚洲精品国精品久久99热一| 久热国产精品| 亚洲第一主播视频| 老妇喷水一区二区三区| 久久久www| 激情欧美一区二区三区在线观看| 午夜精品免费| 亚洲欧美日韩国产一区二区| 欧美视频中文在线看| 中文无字幕一区二区三区| 亚洲黄网站在线观看| 欧美国产视频一区二区| 日韩午夜在线| 欧美亚洲午夜视频在线观看| 欧美韩日视频| 亚洲欧美成人精品| 久久福利影视| 欧美先锋影音| 亚洲性视频h| 一本在线高清不卡dvd| 久久这里有精品视频| 国产日本欧美在线观看| 羞羞视频在线观看欧美| 亚洲欧美日韩一区二区在线 | 亚洲欧美日韩电影| 一区二区三区你懂的| 欧美午夜视频在线| 午夜精品久久久| 欧美在线视频免费播放| 在线观看亚洲视频啊啊啊啊| 久久综合久久88| 欧美成人精品高清在线播放| 一区二区三区四区精品| 国产精品99久久久久久人| 国产欧美一级| 欧美寡妇偷汉性猛交| 欧美日韩亚洲视频| 久久久久一区| 欧美看片网站| 欧美亚洲三区| 欧美成人午夜影院| 亚洲免费视频中文字幕| 久久精品国产2020观看福利| 亚洲精品日韩精品| 欧美一区二区三区四区在线观看| 在线欧美日韩精品| 夜夜嗨av一区二区三区网站四季av | 免费在线成人av| 欧美日韩精品免费观看视频完整| 欧美一区二区在线免费播放| 久久午夜精品| 亚洲一区二区在线看| 欧美中文字幕精品| 亚洲一区二区高清视频| 久久av在线看| 亚洲伊人观看| 欧美成人中文字幕在线| 欧美一级在线播放| 欧美日韩三级在线| 亚洲成人在线视频播放| 亚洲专区在线| 久久久久这里只有精品| 国产精品一区久久久久| 亚洲欧美亚洲| 亚洲国产成人精品女人久久久| 国产精品入口尤物| 欧美一区二区三区四区在线| 免费成人激情视频| 欧美在线亚洲一区| 亚洲一区观看| 午夜精品久久久久久久男人的天堂| 一区精品久久| 午夜一级久久| 亚洲夜晚福利在线观看| 久久影音先锋| 毛片一区二区三区| 国内精品久久久久久| 亚洲天堂av电影| 在线一区二区日韩| 欧美激情91| 亚洲国产日韩欧美| 亚洲电影免费观看高清| 久久久噜噜噜久久久| 久久九九久久九九| 国产情人节一区| 午夜精品视频网站| 欧美在线免费观看视频| 国产精品一级二级三级| 亚洲天堂久久| 欧美伊久线香蕉线新在线| 国产精品久久久久免费a∨| 亚洲天堂av高清| 久久久精品网| 尤物精品在线| 久久久久久尹人网香蕉| 久久综合色婷婷| 亚洲国产激情| 欧美激情精品久久久久久大尺度| 亚洲高清中文字幕| 亚洲视频视频在线| 国产精品影视天天线| 久久丁香综合五月国产三级网站| 快射av在线播放一区| 在线日韩av永久免费观看| 欧美电影在线| 亚洲私人影吧| 欧美+日本+国产+在线a∨观看| 在线观看中文字幕不卡| 欧美大片91| 亚洲综合三区| 你懂的国产精品永久在线| 99re热精品| 国产婷婷精品| 欧美a级片网站| 国产精品99久久久久久宅男| 久久久中精品2020中文| 亚洲每日在线| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲激情综合| 狠狠色2019综合网| 你懂的国产精品| 日韩一级片网址| 久久久久国产成人精品亚洲午夜| 亚洲国产91| 国产精品五区| 免费在线国产精品| 亚洲午夜久久久久久久久电影网| 久久一区二区三区av| 这里是久久伊人| 狠狠色综合播放一区二区| 欧美日本在线一区| 久久久91精品国产一区二区三区 | 欧美好骚综合网| 午夜精品福利在线| 日韩西西人体444www| 国产一区二区精品久久| 欧美日韩国产精品| 久久视频一区二区| 亚洲影院在线| 亚洲三级观看| 欧美激情视频一区二区三区在线播放 | 久久久久成人精品| 亚洲影院免费| 亚洲一区久久久| 亚洲日本欧美| 欧美成人一品|