C#与C/C++类型对照表与参数类型

<p>

<span style="font-size:16px;">最近在研究C/C++, 有一些底层的东西还只能用C/C++编写, 所谓万能语言, 还是非C莫属, 在哪里都能运行.</span> 

</p>
<p>

<span style="font-size:16px;">目前的思路是, 复杂的界面层用.NET搭建, 但是底层用C/C++编写, 这样就涉及到对C封装的dll的访问问题,</span> 

</p>
<p>

<span style="font-size:16px;">以下资料做了一个很好的总结.(主要是对非托管代码的方位, 使用DllImport)</span> 

</p>
<p>

<br />

</p>
<p>

<span style="font-size:16px;"> DllImport具有六个命名参数: </span> 

</p>
<p>

<span style="font-size:16px;">a、CallingConvention 参数指示入口点的调用约定。如果未指定 CallingConvention,则使用默认值 CallingConvention.Winapi。 </span> 

</p>
<p>

<span style="font-size:16px;">b、CharSet 参数指示用在入口点中的字符集。如果未指定 CharSet,则使用默认值 CharSet.Auto。 </span> 

</p>
<p>

<span style="font-size:16px;">c、EntryPoint 参数给出 dll 中入口点的名称。如果未指定 EntryPoint,则使用方法本身的名称。 </span> 

</p>
<p>

<span style="font-size:16px;">d、ExactSpelling 参数指示 EntryPoint 是否必须与指示的入口点的拼写完全匹配。如果未指定 ExactSpelling,则使用默认值 false。 </span> 

</p>
<p>

<span style="font-size:16px;">e、PreserveSig 参数指示方法的签名应当被保留还是被转换。当签名被转换时,它被转换为一个具有 HRESULT 返回值和该返回值的一个名为 retval 的附加输出参数的签名。如果未指定 PreserveSig,则使用默认值 true。 </span> 

</p>
<p>

<span style="font-size:16px;">f、SetLastError 参数指示方法是否保留 Win32"上一错误"。如果未指定 SetLastError,则使用默认值 false。&nbsp;</span> 

</p>
<p>

<span style="font-size:16px;"> </span>
<p>
    <!--more-->
</p>
<p>
    <br />
</p>
<p>
    <!--more-->
</p>
<p>
    <br />
</p>

<p>
    <br />
</p>
<p>
    <span><span style="line-height:24px;">以下是类型对照表:</span></span> 
</p>
<p>
    <br />
</p>

//c++:Byte(unsigned char) ---- c#:System.Byte
//c++:SHORT(short) ---- c#:System.Int16
//c++:WORD(unsigned short) ---- c#:System.UInt16
//c++:INT(int) ---- c#:System.Int16
//c++:INT(int) ---- c#:System.Int32
//c++:UINT(unsigned int) ---- c#:System.UInt16
//c++:UINT(unsigned int) ---- c#:System.UInt32
//c++:LONG(long) ---- c#:System.Int32
//c++:ULONG(unsigned long) ---- c#:System.UInt32
//c++:DWORD(unsigned long) ---- c#:System.UInt32
//c++:DECIMAL ---- c#:System.Decimal
//c++:BOOL(long) ---- c#:System.Boolean
//c++:CHAR(char) ---- c#:System.Char
//c++:LPSTR(char *) ---- c#:System.String
//c++:LPWSTR(wchar_t *) ---- c#:System.String
//c++:LPCSTR(const char *) ---- c#:System.String
//c++:LPCWSTR(const wchar_t *) ---- c#:System.String
//c++:PCAHR(char *) ---- c#:System.String
//c++:BSTR ---- c#:System.String
//c++:FLOAT(float) ---- c#:System.Single
//c++:DOUBLE(double) ---- c#:System.Double
//c++:VARIANT ---- c#:System.Object
//c++:PBYTE(byte *) ---- c#:System.Byte[]
//c++:BSTR ---- c#:StringBuilder
//c++:LPCTSTR ---- c#:StringBuilder
//c++:LPCTSTR ---- c#:string
//c++:LPTSTR ---- c#:[MarshalAs(UnmanagedType.LPTStr)] string
//c++:LPTSTR 输出变量名 ---- c#:StringBuilder 输出变量名
//c++:LPCWSTR ---- c#:IntPtr
//c++:BOOL ---- c#:bool
//c++:HMODULE ---- c#:IntPtr
//c++:HINSTANCE ---- c#:IntPtr
//c++:结构体 ---- c#:public struct 结构体{};
//c++:结构体 **变量名 ---- c#:out 变量名
//C#中提前申明一个结构体实例化后的变量名
//c++:结构体 &变量名 ---- c#:ref 结构体变量名
//c++:WORD ---- c#:ushort
//c++:DWORD ---- c#:uint
//c++:DWORD ---- c#:int
//c++:UCHAR ---- c#:int
//c++:UCHAR ---- c#:byte
//c++:UCHAR* ---- c#:string
//c++:UCHAR* ---- c#:IntPtr
//c++:GUID ---- c#:Guid
//c++:Handle ---- c#:IntPtr
//c++:HWND ---- c#:IntPtr
//c++:DWORD ---- c#:int
//c++:COLORREF ---- c#:uint
//c++:unsigned char ---- c#:byte
//c++:unsigned char * ---- c#:ref byte
//c++:unsigned char * ---- c#:[MarshalAs(UnmanagedType.LPArray)] byte[]
//c++:unsigned char * ---- c#:[MarshalAs(UnmanagedType.LPArray)] Intptr
//c++:unsigned char & ---- c#:ref byte
//c++:unsigned char 变量名 ---- c#:byte 变量名
//c++:unsigned short 变量名 ---- c#:ushort 变量名
//c++:unsigned int 变量名 ---- c#:uint 变量名
//c++:unsigned long 变量名 ---- c#:ulong 变量名
//c++:char 变量名 ---- c#:byte 变量名
//C++中一个字符用一个字节表示,C#中一个字符用两个字节表示
//c++:char 数组名[数组大小] ---- c#:MarshalAs(UnmanagedType.ByValTStr, SizeConst = 数组大小)]
public string 数组名; ushort
//c++:char * ---- c#:string

//传入参数
//c++:char * ---- c#:StringBuilder
//传出参数
//c++:char *变量名 ---- c#:ref string 变量名

//c++:char *输入变量名 ---- c#:string 输入变量名
//c++:char *输出变量名 ---- c#:[MarshalAs(UnmanagedType.LPStr)] StringBuilder 输出变量名
//c++:char ** ---- c#:string
//c++:char **变量名 ---- c#:ref string 变量名
//c++:const char * ---- c#:string
//c++:char[] ---- c#:string
//c++:char 变量名[数组大小] ---- c#:[MarshalAs(UnmanagedType.ByValTStr,SizeConst=数组大小)] public string 变量名;

//c++:struct 结构体名 *变量名 ---- c#:ref 结构体名变量名

//c++:委托 变量名 ---- c#:委托变量名
//c++:int ---- c#:int
//c++:int ---- c#:ref int
//c++:int & ---- c#:ref int
//c++:int * ---- c#:ref int
//C#中调用前需定义int 变量名 = 0;
//c++:*int ---- c#:IntPtr
//c++:int32 PIPTR * ---- c#:int32[]
//c++:float PIPTR * ---- c#:float[]
//c++:double** 数组名 ---- c#:ref double 数组名
//c++:double*[] 数组名 ---- c#:ref double 数组名
//c++:long ---- c#:int
//c++:ulong ---- c#:int
//c++:UINT8 * ---- c#:ref byte
//C#中调用前需定义byte 变量名 = new byte();
//c++:handle ---- c#:IntPtr
//c++:hwnd ---- c#:IntPtr
//c++:void * ---- c#:IntPtr
//c++:void * user_obj_param ---- c#:IntPtr user_obj_param
//c++:void * 对象名称 ---- c#:([MarshalAs(UnmanagedType.AsAny)]Object 对象名称
//c++:char, INT8, SBYTE, CHAR ---- c#:System.SByte
//c++:short, short int, INT16, SHORT ---- c#:System.Int16
//c++:int, long, long int, INT32, LONG32, BOOL , INT ---- c#:System.Int32
//c++:__int64, INT64, LONGLONG ---- c#:System.Int64
//c++:unsigned char, UINT8, UCHAR , BYTE ---- c#:System.Byte
//c++:unsigned short, UINT16, USHORT, WORD, ATOM, WCHAR , __wchar_t ---- c#:System.UInt16

//c++:unsigned, unsigned int, UINT32, ULONG32, DWORD32, ULONG, DWORD, UINT ---- c#:System.UInt32

//c++:unsigned __int64, UINT64, DWORDLONG, ULONGLONG ---- c#:System.UInt64

//c++:float, FLOAT ---- c#:System.Single

//c++:double, long double, DOUBLE ---- c#:System.Double

//Win32 Types ---- CLR Type
//Struct需要在C#里重新定义一个Struct
//CallBack回调函数需要封装在一个委托里,delegate static extern int FunCallBack(string str);
//unsigned char** ppImage替换成IntPtr ppImage
//int& nWidth替换成ref int nWidth
//int*, int&, 则都可用 ref int 对应
//双针指类型参数,可以用 ref IntPtr
//函数指针使用c++: typedef double (*fun_type1)(double); 对应 c#:public delegate double fun_type1(double);
//char 的操作c++: char; 对应 c#:StringBuilder;
//c#中使用指针:在需要使用指针的地方 加 unsafe

<p>
    <br />
</p>
<p>
    <span style="font-size:18px;">以下是类型对照的另一种表述, 哪种查阅方便就用哪种吧.</span> 
</p>
<p>
    <span style="font-size:18px;"> </span> 
</p>
<p style="font-family:Verdana;font-size:13px;background-color:#FFFFFF;">
    C++&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; C#<br />

=====================================

WORD            ushort

DWORD            uint

UCHAR            int/byte   大部分情况都可以使用int代替,而如果需要严格对齐的话则应该用bytebyte 

UCHAR*            string/IntPtr

unsigned char*         [MarshalAs(UnmanagedType.LPArray)]byte[]/?(Intptr)

char*            string

LPCTSTR            string

LPTSTR            [MarshalAs(UnmanagedType.LPTStr)] string

long            int

ulong               uint

Handle            IntPtr

HWND            IntPtr

void*            IntPtr

int            int

int*            ref int

*int            IntPtr

unsigned int        uint

COLORREF                uint

</p>
<p style="font-family:Verdana;font-size:13px;background-color:#FFFFFF;">
    &nbsp;
</p>
<p style="font-family:Verdana;font-size:13px;background-color:#FFFFFF;">
    &nbsp;
</p>
<table width="600" class="ke-zeroborder" style="border:1px solid silver;color:#000000;font-family:Verdana;font-size:13px;" bgcolor="#666666" border="0" cellpadding="1">
    <tbody>
        <tr>
            <td style="border:1px solid silver;" bgcolor="#ffffff" colspan="6">
                <div align="center">
                    API与C#的数据类型对应关系表
                </div>
            </td>
        </tr>
        <tr>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                API数据类型
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                类型描述
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                C#类型
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                API数据类型
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                类型描述
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                C#类型
            </td>
        </tr>
        <tr>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                WORD
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                16位无符号整数
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                ushort
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                CHAR
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                字符
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                char
            </td>
        </tr>
        <tr>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                LONG
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                32位无符号整数
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                int
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                DWORDLONG
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                64位长整数
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                long
            </td>
        </tr>
        <tr>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                DWORD
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                32位无符号整数
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                uint
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                HDC
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                设备描述表句柄
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                int
            </td>
        </tr>
        <tr>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                HANDLE
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                句柄,32位整数
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                int
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                HGDIOBJ
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                GDI对象句柄
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                int
            </td>
        </tr>
        <tr>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                UINT
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                32位无符号整数
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                uint
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                HINSTANCE
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                实例句柄
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                int
            </td>
        </tr>
        <tr>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                BOOL
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                32位布尔型整数
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                bool
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                HWM
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                窗口句柄
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                int
            </td>
        </tr>
        <tr>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                LPSTR
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                指向字符的32位指针
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                string
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                HPARAM
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                32位消息参数
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                int
            </td>
        </tr>
        <tr>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                LPCSTR
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                指向常字符的32位指针
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                String
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                LPARAM
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                32位消息参数
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                int
            </td>
        </tr>
        <tr>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                BYTE
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                字节
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                byte
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                WPARAM
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                32位消息参数
            </td>
            <td style="border:1px solid silver;" bgcolor="#ffffff">
                int
            </td>
        </tr>
    </tbody>
</table>
<p style="font-family:Verdana;font-size:13px;background-color:#FFFFFF;">
    &nbsp;
</p>
<p style="font-family:Verdana;font-size:13px;background-color:#FFFFFF;">
    &nbsp;
</p>
<p style="font-family:Verdana;font-size:13px;background-color:#FFFFFF;">
    &nbsp;
</p>
<p style="font-family:Verdana;font-size:13px;background-color:#FFFFFF;">
    BOOL=System.Int32<br />

BOOLEAN=System.Int32

BYTE=System.UInt16

CHAR=System.Int16

COLORREF=System.UInt32

DWORD=System.UInt32

DWORD32=System.UInt32

DWORD64=System.UInt64

FLOAT=System.Float

HACCEL=System.IntPtr

HANDLE=System.IntPtr

HBITMAP=System.IntPtr

HBRUSH=System.IntPtr

HCONV=System.IntPtr

HCONVLIST=System.IntPtr

HCURSOR=System.IntPtr

HDC=System.IntPtr

HDDEDATA=System.IntPtr

HDESK=System.IntPtr

HDROP=System.IntPtr

HDWP=System.IntPtr

HENHMETAFILE=System.IntPtr

HFILE=System.IntPtr

HFONT=System.IntPtr

HGDIOBJ=System.IntPtr

HGLOBAL=System.IntPtr

HHOOK=System.IntPtr

HICON=System.IntPtr

HIMAGELIST=System.IntPtr

HIMC=System.IntPtr

HINSTANCE=System.IntPtr

HKEY=System.IntPtr

HLOCAL=System.IntPtr

HMENU=System.IntPtr

HMETAFILE=System.IntPtr

HMODULE=System.IntPtr

HMONITOR=System.IntPtr

HPALETTE=System.IntPtr

HPEN=System.IntPtr

HRGN=System.IntPtr

HRSRC=System.IntPtr

HSZ=System.IntPtr

HWINSTA=System.IntPtr

HWND=System.IntPtr

INT=System.Int32

INT32=System.Int32

INT64=System.Int64

LONG=System.Int32

LONG32=System.Int32

LONG64=System.Int64

LONGLONG=System.Int64

LPARAM=System.IntPtr

LPBOOL=System.Int16[]

LPBYTE=System.UInt16[]

LPCOLORREF=System.UInt32[]

LPCSTR=System.String

LPCTSTR=System.String

LPCVOID=System.UInt32

LPCWSTR=System.String

LPDWORD=System.UInt32[]

LPHANDLE=System.UInt32

LPINT=System.Int32[]

LPLONG=System.Int32[]

LPSTR=System.String

LPTSTR=System.String

LPVOID=System.UInt32

LPWORD=System.Int32[]

LPWSTR=System.String

LRESULT=System.IntPtr

PBOOL=System.Int16[]

PBOOLEAN=System.Int16[]

PBYTE=System.UInt16[]

PCHAR=System.Char[]

PCSTR=System.String

PCTSTR=System.String

PCWCH=System.UInt32

PCWSTR=System.UInt32

PDWORD=System.Int32[]

PFLOAT=System.Float[]

PHANDLE=System.UInt32

PHKEY=System.UInt32

PINT=System.Int32[]

PLCID=System.UInt32

PLONG=System.Int32[]

PLUID=System.UInt32

PSHORT=System.Int16[]

PSTR=System.String

PTBYTE=System.Char[]

PTCHAR=System.Char[]

PTSTR=System.String

PUCHAR=System.Char[]

PUINT=System.UInt32[]

PULONG=System.UInt32[]

PUSHORT=System.UInt16[]

PVOID=System.UInt32

PWCHAR=System.Char[]

PWORD=System.Int16[]

PWSTR=System.String

REGSAM=System.UInt32

SC_HANDLE=System.IntPtr

SC_LOCK=System.IntPtr

SHORT=System.Int16

SIZE_T=System.UInt32

SSIZE_=System.UInt32

TBYTE=System.Char

TCHAR=System.Char

UCHAR=System.Byte

UINT=System.UInt32

UINT32=System.UInt32

UINT64=System.UInt64

ULONG=System.UInt32

ULONG32=System.UInt32

ULONG64=System.UInt64

ULONGLONG=System.UInt64

USHORT=System.UInt16

WORD=System.UInt16

WPARAM=System.IntPtr

</p>
<p style="font-family:Verdana;font-size:13px;background-color:#FFFFFF;">
    &lt;---------补充-----------&gt;
</p>
<p style="font-family:Verdana;font-size:13px;background-color:#FFFFFF;">
    Wtypes.h 中的非托管类型&nbsp;&nbsp;&nbsp; 非托管C 语言类型&nbsp;&nbsp;&nbsp; 托管类名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 说明&nbsp;<br />

HANDLE                        void*                   System.IntPtr  32 位 

BYTE                            unsigned char       System.Byte    8 位 

SHORT                         short                    System.Int16   16 位 

WORD                          unsigned short      System.UInt16  16 位 

INT                               int                       System.Int32   32 位 

UINT                             unsigned int         System.UInt32  32 位 

LONG                            long                    System.Int32   32 位 

BOOL                            long                    System.Int32   32 位 

DWORD                        unsigned long       System.UInt32  32 位 

ULONG                          unsigned long      System.UInt32  32 位 

CHAR                            char                    System.Char    用 ANSI 修饰。 

LPSTR                           char*                  System.String 或 System.StringBuilder 用 ANSI 修饰。 

LPCSTR                         Const char*         System.String 或 System.StringBuilder 用 ANSI 修饰。 

LPWSTR                        wchar_t*             System.String 或 System.StringBuilder 用 Unicode 修饰。 

LPCWSTR                      Const wchar_t*    System.String 或 System.StringBuilder 用 Unicode 修饰。 

FLOAT                           Float                    System.Single 32 位 

DOUBLE                        Double                 System.Double 64 位

</p>

<p>
    <br />
</p>








































































































































































































































































Read >>


C/C++ 指针数组和指向指针的指针

<h1 style="color:#333333;font-family:Arial;background-color:#FFFFFF;">

一 &nbsp;指针数组

</h1>
<h2>

1.1 &nbsp;<span style="color:#333333;line-height:1.5;font-family:Arial;background-color:#FFFFFF;">定义:</span> 

</h2>
<p>

<span style="color:#333333;line-height:1.5;font-family:Arial;background-color:#FFFFFF;"><span style="color:#333333;line-height:26px;font-family:Arial;font-size:14px;background-color:#FFFFFF;">如果一个 数组,其元素均为指针型数据,该数组为指针数组,也就是说,指针数组中的每一个元素相当于一个指针变量,它的值都是地址。</span><br />

 </span>
</p>
<h2>

<span style="color:#333333;line-height:1.5;font-family:Arial;background-color:#FFFFFF;">1.2 &nbsp;</span><span style="color:#333333;line-height:1.5;font-family:Arial;background-color:#FFFFFF;">形式:</span> 

</h2>
<span style="color:#333333;line-height:1.5;font-family:Arial;background-color:#FFFFFF;">
<p style="color:#333333;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

一维指针数组的定义形式为:

</p>
<p style="color:#333333;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

int【类型名】 *p【数组名】 [4]【数组长度】;

</p>
<p style="color:#333333;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

由于[ ]比*优先级高,因此p先与[4]结合,形成p[4]的数组的形式。然后与p前面的“ * ”结合,“ * ”表示此数组是指针类型的,每个数组元素都相当于一个指针变量,都可以指向整形变量。

</p>
<p style="color:#333333;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

注意:不能写成int (*p)[4]的形式,这是指的一个指向<a href="http://blog.csdn.net/qianshouyuzhibo/article/details/9474223#yiwei">一维数组的指针变量</a>。

</p>
<p style="color:#333333;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

使用指针数组中各元素分别指向若干个字符串,使字符串的处理更加灵活。

</p>
<h2>

<span style="line-height:1.5;">程序1.1</span> 
<p>
    <!--more-->
</p>
<p>
    <br />
</p>

</h2>
<p>

<span style="line-height:1.5;"> </span> 

</p>

#include<iostream>
using namespace std;
int main(){
    void sort(char *p[],int n);
    void print(char *p[],int n);
    char *name[]={"C","C++","PHP","ASP","ASP.NET","C#","JAVA","BASIC","PASCAL","COBOL"};
    int n=10;
    sort(name,n);
    print(name,n);
    return 0;
}
void sort(char *p[],int n){
    char *temp;
    int i,j,k;
    for(i=0;i<n;i++){
        k=i;
        for(j=i;j<n;j++){
            if(strcmp(p[j],p[k])<0){
                k=j;
            }
        }
        if(k!=i){
            temp=p[k];
            p[k]=p[i];
            p[i]=temp;
        }
    }
}
void print(char *p[],int n){
    int i;
    for(i=0;i<n;i++){
        cout<<p[i]<<endl;
    }
}





<h3 style="color:#333333;font-family:Arial;background-color:#FFFFFF;">

<a name="undefined"></a>分析:

</h3>
<p style="color:#333333;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

在main函数中定义了指针数组name,它的十个元素分别是字符串

</p>

  1. <span style="color:black;background-color:inherit;"><span class="string" style="color:blue;background-color:inherit;">"C"</span><span style="background-color:inherit;">,</span><span class="string" style="color:blue;background-color:inherit;">"C++"</span><span style="background-color:inherit;">,</span><span class="string" style="color:blue;background-color:inherit;">"PHP"</span><span style="background-color:inherit;">,</span><span class="string" style="color:blue;background-color:inherit;">"ASP"</span><span style="background-color:inherit;">,</span><span class="string" style="color:blue;background-color:inherit;">"ASP.NET"</span><span style="background-color:inherit;">,</span><span class="string" style="color:blue;background-color:inherit;">"C#"</span><span style="background-color:inherit;">,</span><span class="string" style="color:blue;background-color:inherit;">"JAVA"</span><span style="background-color:inherit;">,</span><span class="string" style="color:blue;background-color:inherit;">"BASIC"</span><span style="background-color:inherit;">,</span><span class="string" style="color:blue;background-color:inherit;">"PASCAL"</span><span style="background-color:inherit;">,</span><span class="string" style="color:blue;background-color:inherit;">"COBOL"</span><span style="background-color:inherit;">  </span></span>

<span style="color:#333333;line-height:26px;font-family:Arial;font-size:14px;background-color:#FFFFFF;">的起始地址。然后将数组的首元素的地址传到函数sort中p数组中,因此形参p和实参name指向的是同一个数组。然后用选择法对数组进行了排序。</span>
<p style="color:#333333;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

print函数的作用,是输出各字符串,p[0]~p[9]分别是各字符串的首地址。

</p>
<p style="color:#333333;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

print函数还可以改写成一下形式:

</p>

void print(char *p[],int n){
    char *q=p[0];
    int i=0;
    while(i<n){
        q=*(p+i++);
        cout<<q<<endl;
    }
}



</span>
<p>

<br />

</p>
<h1>

二 &nbsp;指向指针的指针

</h1>
<p>

<br />

</p>
<h2>

<span style="line-height:1.5;">2.1 &nbsp;</span><span style="line-height:1.5;">定义:</span> 

</h2>
<span style="line-height:1.5;"><span style="color:#333333;line-height:26px;font-family:Arial;font-size:14px;background-color:#FFFFFF;">指向指针数据的指针就是指向指针的指针,例如在程序1.1中的main函数中定义的指针数组name[10],</span></span>
<p>

<br />

</p>
<p>

<span style="line-height:1.5;"> </span> 

</p>

  1. <span style="color:black;background-color:inherit;"><span class="datatypes" style="color:#2E8B57;font-weight:bold;background-color:inherit;">char</span><span style="background-color:inherit;">  p=name  </span></span>

<span style="color:#333333;line-height:26px;font-family:Arial;font-size:14px;background-color:#FFFFFF;">就表示把指针数组的首个指针元素的地址赋给指向指针的变量p;</span>
<p>

<br />

</p>
<h2>

<span style="line-height:1.5;"><br />

</span><span style="line-height:1.5;">程序2.1  </span>
</h2>

#include<iostream>
using namespace std;
int main(){
    char *name[]={"C","C++","PHP","ASP","ASP.NET","C#","JAVA","BASIC","PASCAL","COBOL"};
    char  p;
    p=name+2;
    cout<<p<<endl;
    cout<<*p<<endl;//等价于name[2] 
    cout<< p<<endl;
    return 0;
}

<p>

<img width="543" height="242" alt="" src="http://img.blog.csdn.net/20130729001615140?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUWlhblNob3VZdVpoaUJv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /> 

</p>
<p>

<br />

</p>
<h2>

2.2 &nbsp;分析

</h2>
<p>

<br />

</p>
<p style="color:#333333;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

p是指向指针的指针,也就是存放的name[2]的地址的值;

</p>
<p style="color:#333333;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

*p是指针,也就是name[2]的值(指针数组中的元素);

</p>
<p style="color:#333333;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

* *p是指针指向的数据的值,因为定义的p是指向char类型的数据,所以结果输出第一个字符。

</p>
<div>

<br />

</div>
<p>

Source:<a href="http://blog.csdn.net/qsyzb/article/details/9567463" target="_blank">http://blog.csdn.net/qsyzb/article/details/9567463</a> 

</p>





































Read >>


C/C++值传递、引用传递、指针传递、指针引用传递

<h1 style="color:#362E2B;font-family:Arial;background-color:#FFFFFF;">

&nbsp;C/C++语言参数传递----值传递、引用传递、指针传递、指针引用传递<br />

</h1>
<h2 style="color:#362E2B;font-family:Arial;background-color:#FFFFFF;">

1.值传递

</h2>
<p>

<br />

</p>

void f( int  p){
    printf("n%x",&p);
    printf("n%x",p);
    p=0xff;
}
void main()
{
    int a=0x10;
    printf("n%x",&a);
    printf("n%xn",a);
    f(a);
    printf("n%xn",a);
}

<p>

<p>
    <!--more-->
</p>
<p>
    <br />
</p>

</p>
<p>

<img alt="" src="/wp-content/uploads/2014/10/20141025012810_37142.png" /> 

</p>
<p>

<span style="color:#362E2B;line-height:26px;font-family:Arial;font-size:18px;background-color:#FFFFFF;">通过上例我们可以看到,int a=0x10,存放的地址为0x12ff44,值为10,当调用f(a)时,传递给p的值为10,但是p的地址为0x12fef4,当改变p=0xff,时是改变地址为0x12fef4中的内容,并没有改变0x12ff44中的内容,所以调用f(a),后a的值仍然为0x10,所以值传递无法改变变量的值。示意图如下:</span> 

</p>
<p>

<img width="613" height="354" alt="" src="http://img.blog.csdn.net/20131021103938750?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2h6aGFvY2hhbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" /> 

</p>
<p>

<br />

</p>
<h2 style="color:#362E2B;font-family:Arial;background-color:#FFFFFF;">

2.引用传递

</h2>

void f( int & p){
    printf("n%x",&p);
    printf("n%x",p);
    p=0xff;
}
void main()
{
    int a=0x10;
    printf("n%x",&a);
    printf("n%xn",a);
    f(a);
    printf("n%xn",a);
}

<p>

<img width="495" height="246" alt="" src="http://img.blog.csdn.net/20131020215623390" /> 

</p>
<p>

<br />

</p>
<p>

<span style="color:#362E2B;line-height:26px;font-family:Arial;font-size:18px;background-color:#FFFFFF;">通过上面引用传递传递案例我们可以看到,调用f(a)时,传递给p的是a的地址,所以p和a的地址都是0X12ff44,所以p就是a,改变p当然能改变a。示意图如下:</span> 

</p>
<p>

<img width="387" height="209" alt="" src="http://img.blog.csdn.net/20131021104454656" /> 

</p>
<p>

<br />

</p>
<p>

<br />

</p>
<h2 style="color:#362E2B;font-family:Arial;background-color:#FFFFFF;">

3.指针传递

</h2>

void f( int*p){
    printf("n%x",&p);
    printf("n%x",p);
    printf("n%xn",*p);
    *p=0xff;
}
void main()
{
    int a=0x10;
    printf("n%x",&a);
    printf("n%xn",a);
    f(&a);
    printf("n%xn",a);
}


<p>

<br />

</p>
<p>

<br />

</p>
<p>

<span style="color:#362E2B;line-height:26px;font-family:Arial;font-size:18px;background-color:#FFFFFF;">通过指针传递的案例我们可以看到,调用f(&amp;a)是将a的地址0x12ff44传递给p,则*p就指向了a的内容,改变*p后,a的内容自然就改变了,示意图如下:</span> 

</p>
<p>

<br />

</p>
<p>

<img width="619" height="330" alt="" src="http://img.blog.csdn.net/20131021110737953" /> 

</p>
<p>

<br />

</p>
<p>

<br />

</p>
<h2 style="color:#362E2B;font-family:Arial;background-color:#FFFFFF;">

4.指针的引用传递

</h2>

void f( int*&p){
    printf("n%x",&p);
    printf("n%x",p);
    printf("n%xn",*p);
    *p=0xff;
}
void main()
{
    int a=0x10;
    printf("n%x",&a);
    printf("n%xn",a);
    int *b=&a;
    printf("n%x",&b);
    printf("n%x",b);
    printf("n%xn",*b);
    f(b);
    printf("n%xn",a);
}

<div style="color:#362E2B;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

<br />



</div>
<div style="color:#362E2B;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

<br />

</div>
<h1 style="color:#362E2B;font-family:Arial;background-color:#FFFFFF;">

<a name="undefined"></a><span style="font-size:18px;"><span></span>为了使用指针的引用传递我们要新建一个指针b,然后将b的引用传递给p,其实p就是b的一个拷贝,*p=*b都指向a,所以改变*p的内容也就改变a的内容。示意图如下:</span> 

</h1>
<h1 style="color:#362E2B;font-family:Arial;background-color:#FFFFFF;">

<a name="undefined"></a><img alt="" src="http://img.blog.csdn.net/20131021111429937" /> 

</h1>
<div style="color:#362E2B;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

<span style="font-size:18px;">我们再来看一下如果不用指针的引用传递会出现什么结果</span> 

</div>

void f( int*p){
    printf("n%x",&p);
    printf("n%x",p);
    printf("n%xn",*p);
    *p=0xff;
}
void main()
{
    int a=0x10;
    printf("n%x",&a);
    printf("n%xn",a);
    int *b=&a;
    printf("n%x",&b);
    printf("n%x",b);
    printf("n%xn",*b);
    f(b);
    printf("n%xn",a);
    printf("n%xn",b);
}

<p>

<br />

</p>
<p>

<br />

</p>
<div style="color:#362E2B;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

<br />



</div>
<div style="color:#362E2B;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

<span style="font-size:18px;"><span></span></span> 

</div>
<div style="color:#362E2B;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

<span></span><span style="font-size:18px;">从结果中我们可以看到调用f(b)时,传递给p的是b的内容,但是&amp;b,和&amp;p是不一样的,虽然*p和*b都指向a。示意图如下:</span> 

</div>
<div style="color:#362E2B;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

<span style="font-size:18px;"><img alt="" src="http://img.blog.csdn.net/20131021112458390" /><br />

</span>
</div>
<div style="color:#362E2B;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

<span style="font-size:18px;"><br />

</span>
</div>
<h2 style="color:#362E2B;font-family:Arial;background-color:#FFFFFF;">

<a name="undefined"></a>5.错误案例

</h2>
<div>

#include <stdio.h>
#include <malloc.h>
#include <string.h>

void Allocate(char* p,int size){

    printf("n%x",&p);
    printf("n%x",p);

    p=(char*)malloc(size);
}
void Free(char* p){
    free(p);
}
void main()
{
    char *str=NULL;
    printf("n%X",&str);
    printf("n%X",str);
    Allocate(str,100);
    strcpy(str,"Hello World!");
    printf("n%s",str);
    Free(str);
    printf("nstr=%s",str);
    
}



</div>
<div style="color:#362E2B;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

<br />



</div>
<div style="color:#362E2B;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

<br />

</div>
<div style="color:#362E2B;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

<span style="font-size:18px;"><span></span>当执行strcpy(str,"Hello World!"),时会报Unhandled exception in CPoint.exe:0xC0000005:Access Violation,这是因为我们参用的是指针传递,从运行结果我们可以看到str的地址为0x12ff44,当调用Allocate(str,100)时,传递给p的是str,的内容也就是0,所以p为0,但是&amp;p并不是和&amp;str一样的,所以在运行p=(char*)malloc(size)时,是给0x12fef0分配的100个字节,并没有给0x12ff44分配字节,所以*str还是空。所以会报错。</span> 

</div>
<h2 style="color:#362E2B;font-family:Arial;background-color:#FFFFFF;">

<a name="undefined"></a>6.正确案例<br />

</h2>

#include <stdio.h>
#include <malloc.h>
#include <string.h>

void Allocate(char*& p,int size){
    printf("n%x",&p);
    printf("n%x",p);
    p=(char*)malloc(size);
}
void Free(char* p){
    free(p);
}
void main()
{
    char *str=NULL;
    printf("n%X",&str);
    printf("n%X",str);
    Allocate(str,100);
    strcpy(str,"Hello World!");
    printf("n%s",str);
    Free(str);    
}

<p>

<br />

</p>
<div style="color:#362E2B;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

<br />



</div>
<div style="color:#362E2B;font-family:Arial;font-size:14px;background-color:#FFFFFF;">

<br />

<span></span><span style="font-size:18px;">因为指针引用传递的是指针的拷贝,所以&str和&p,是地址是一样的,所以对p分配内容空间也就是对str分配空间,所以没有问题!</span>
</div>
<p>

<br />

</p>
<p>

Source: &nbsp;<a href="http://blog.csdn.net/whzhaochao/article/details/12891329" target="_blank">http://blog.csdn.net/whzhaochao/article/details/12891329</a> 

</p>


















































Read >>


Table for Signal words indicating relationships in the context.

<div style="font-size:15px;color:red;">Notice: This material is extracted from the book 'Manhattan Prep GRE guide 7' and only for personal use in English study.</div>

Read >>


简明markdown语法教程

Markdown语法简单, 写作快速, 目前许多平台都支持markdown语法, 例如github, windows live writer.
多许多人而言, 使用markdown语法写作博客是一种享受, 同样本博客使用的平台Typecho也支持markdown语法,
下面让我们一起简单地学习下常用的一些markdown语法.



Read >>


两个实用的CSS Icon框架--极大降低美工工作量

<p>

<span style="font-size:16px;">对于前端攻城师们来说, 画icon是一项很痛苦的事情.</span> 

</p>
<p>

<span style="font-size:16px;">然而, 大多数icon网络上都已经有了, 例如 媒体, 电话, email, 等</span> 

</p>
<p>

<span style="font-size:16px;">甚至有人讲这些icon整合为框架, 大家可以通过简单的额css语句即可轻松实用这些icon,包括可变大小.</span> 

</p>
<p>

<span style="font-size:16px;">下面介绍两个较为常用的css icon框架.</span> 




Read >>


技术创始人如何挑选非技术合伙人?

<h1 class="name post-title entry-title" style="color:#333333;font-family:BebasNeueRegular, arial, Georgia, serif;font-size:24px;background-color:#FFFFFF;">

<span>技术创始人如何挑选非技术合伙人?</span> 

</h1>
<p class="post-meta" style="color:#AAAAAA;font-family:&quot;background-color:#FFFFFF;">

<span>Posted by:&nbsp;<a href="http://chuang.pro/archives/author/czruc">陈铮</a></span>&nbsp;<span>2014年10月21日</span> <span>in&nbsp;<a href="http://chuang.pro/archives/category/original">原创</a>,&nbsp;<a href="http://chuang.pro/archives/category/soup">素朴</a></span>&nbsp;<span><a class="ds-thread-count" href="http://chuang.pro/archives/8769#respond">暂无评论</a></span> 

</p>
<div class="clear" style="margin:0px;padding:0px;border:0px currentColor;color:#333333;font-family:&quot;font-size:14px;background-color:#FFFFFF;">
</div>
<div class="entry" style="margin:0px;padding:0px;border:0px currentColor;color:#333333;font-family:&quot;font-size:16px;background-color:#FFFFFF;">

<p>
    <strong>原文地址:<a class="ext-link ext-icon-3" href="http://onstartups.com/tabid/3339/bid/104056/A-Tech-Founder-s-Guide-To-Picking-A-Non-Tech-Founder.aspx" target="_blank">OnStartups.com</a>&nbsp;,本译文由创之(<a href="http://chuang.pro/" target="_blank">chuang.pro</a>)为您奉献。</strong> 
</p>
<p>
    有很多文章和博客都在为创业者如何找到一个绝佳的技术合伙人指点迷境,而在现实中想要找到一个技术合伙人是其实并不困难。从&nbsp;<a class="ext-link ext-icon-3" href="http://members.founderdating.com/connect?s=ostf" target="_blank">Founder Dating</a>&nbsp;上讨论的话题来看,一个非常重要却又很少被提及(至少媒体上没有什么报道)的问题是如何寻找到一个管理公司的非技术合伙人。最近一年来在 FD 的 Q&amp;A 板块中被持续讨论最长时间的的话题就是:技术合伙人用什么标准来评估非技术合伙人?
</p>
<p>
    <strong>这事怎么就这么难!</strong> 
</p>
<p>
    当你本身从事技术工作,并且打算招募一个同样也做技术的人才时,通常你会习惯于给他出一个客观的「测试」题目,来检验一下他是否具备相应的能力,这些题目包括白板测试、编码项目、结对编程等等。即使你本身并非开发人员,但是如果你需要找一个从事编程项目的共事者,你很容易就可以从专家或者从事技术工作的朋友那里得到专业的意见。当然了,仅仅知道一个人的专业水准如何并不足以让你决定是否与其共事,尤其是寻找合伙人的时候(你当然还需要对这个人性格方面有所了解),但是这至少解决了非常核心的技能评测问题。
    <p>
        <!--more-->
    </p>
    <p>
        <br />
    </p>
</p>
<p>
    但不幸的是,目前还没有为非技术人员所设计的像白板测试一样可以评价其能力的方法(如果有人知道的话请与我分享)。挑选非技术人员时,你虽然能知道他们对于开展工作的大致想法,但是却没有一个具体的方式可以帮助你确定他们是否擅长发掘客户或者招募人才之类的工作。
</p>
<p>
    <strong>选人时最常见的错误</strong> 
</p>
<p>
    你并不知道自己多么无知,这就导致了许多技术合伙人依靠一些看上去重要但是实际上错误的特征去寻找非技术合伙人。一些具备以下这些最受欢迎特征的人告诉我,他们寻找的正是一些不具备和自己一样特征的人才:
</p>
<p>
    1、相关领域的专家:我猜你会想要雇佣某领域的专家是因为觉得他们的想法可以改变行业现状(实际上几乎从来不能实现)。但是一些非常成功的公司恰恰是由一些在所处行业中毫无经验的人所创立的,这也正是他们为什么能够改变行业现状的原因所在。在创业伊始时,Kevin Hartz 在票务行业中没有任何相关背景,而 Max Levchin 对于在线支付领域中也没有任何经验。通常在一个行业中任职太久,会让人失去对其进行反思改进的能力。
</p>
<p>
    2、毕业于顶尖高校或者曾就职于顶尖公司:这些条件用来吹牛当然不错,但如果你是加入 Facebook 的第 4000 名员工,那么仅仅就职于 Facebook 这一行为并不能证明你是好是坏。
</p>
<p>
    3、构建了一个原型:这当然是有帮助的,起码证明了他们不仅能说,而且能干&nbsp;。不过你也不可能想要在今后的工作中沿用之前的代码,或者是任他总是重复一个思维套路。
</p>
<p>
    <strong>如何去寻找到合适的非技术合伙人?</strong> 
</p>
<p>
    作为一个非技术合伙人,他的工作范围涵盖了从产品到招聘的各个方面,甚至还包括了说一堆漂亮的废话。在这里我不能提供具体的诸如白板测试的方法,但是有一些个人特征是你在寻找非技术创始人的时候可以参考的:
</p>
<p>
    1、<strong>迅速解决问题</strong>——当你成立公司或者启动一个项目的时候将会碰到什么状况是很难确定的。而我唯一可以确定告诉你的是,你和你的合伙人将会面临一大堆你们前所未有的海量工作,这其中的工作量远远超过了你们曾经所经历过的任何工作。你的非技术合伙人能迅速地在各种事务中理清头绪吗?他们能快速地解决问题吗?只要他们能做到其中一样对你来说就已经是一个巨大的惊喜了,然而实际上你不能对于非技术合伙人们抱有如此乐观的期待。作为公司的合伙人通常需要在筹款、产品、维护合作伙伴关系等各个方面做到「足够好」,你当然可以在之后为这些特定的工作雇佣适合的人才,但是在初创阶段你需要的是一个全能选手,能够执行不同的工作任务。
</p>
<p>
    2、<strong>使命必达的能力</strong>——当你在创立公司时手头所要处理的事务简直没有一个尽头,如果你和风投们谈谈并且提供给他们一个你最需要做的 20 件事情清单,他们也未必能够从中排出优先级并剔除那些没必要去做的事情(特别是有些事情他们也从来没做过)。当你的非技术合伙人说他打算去做什么并且马上就去完成,尤其还做的很好的时候,你应该对于这样的非技术合伙人抱有十足的信心。
</p>
<p>
    3、<strong>坚定不移的决心</strong>:好吧,我在之前说谎了,其实在创建公司的过程中有两点是可以确定的,除了海量工作之外还有一个就是你将一次又一次地被拒绝。你的非技术合伙人能够承受这些消极的反馈吗?他们通常要花多少时间才能从被拒绝的沮丧中恢复?是否有当联合创始人的经历,或者是否曾经在一个公司创业初期就加入其中,这是判断一个合伙人候选者的决心的重要标准。因为这些经历代表他们曾投入到创业初期大大小小的战斗中,得到满身伤疤但从不退缩。他们曾经在何种领域中创业过并不重要,重要的是在这个过程中他们获得了心理承受能力上的锻炼。保罗•格雷厄姆有一篇关于创业决心的著名文章,在 Cliff notes 版本中是这样说的:「我们很快就明白了对于成功来说最重要的预示指标就是决心。」你和你的非技术合伙人需要在一起工作相当长的时间去清除创业道路上的各种障碍,从中你也可以看出他们的决心。
</p>
<p>
    4、<strong>高超的沟通技巧</strong>:实际上这包含了两方面内容:
</p>
<p>
    1)他能理解关于技术的话题吗?你当然不能指望自己的非技术合伙人对于技术能够和你了解的一样多,但是他们有没有尝试着去理解你们所涉及的技术层面内容呢?他有过和工程师一起工作的经历吗?他能够理解工程师所提出的问题吗?如果你不知道这些问题的答案,可以试着去要求他谈一谈过去合作过的技术部门的同事。非技术合伙人尝试着学习编程是一个鼓舞人心的信号,虽然这么做并不会给公司的技术工作带来多大的贡献,但是这很大程度上表明了这个人充满了好奇心,并且想要去理解工程师们的工作。
</p>
<p>
    2)他们能够和别人进行有效的沟通吗?这里的「别人」包括投资者、潜在的员工以及顾客。如果你开发了一个软件服务产品,他们能为产品找到第一个顾客吗?如果你有一个面向消费者的产品,他们能够去找到第一批尝试者参加测试,并且在之后收集反馈完成工作吗?他们能够置身于人群中并且让这些人为你的产品兴奋起来吗?这些人可能来自于创业者的周末集会或者是一群学生。你不能等着让你的投资者来解决上述问题。
</p>
<p>
    也许你已经注意到了,光靠几次见面是不能判断一个人是否具备了上述四个方面的特质的,想要了解一个人是否拥有这些特质,首先要做的就是在一起工作。当你和非技术合伙人在一起实际操作项目的时候,你很容易就能从实际工作中判断他们是否符合上述这些指标。如果你已经在实际工作中按照我的这个方法做了也没关系,读了此文你会从中得到比喝上十杯咖啡绞尽脑汁地思考或者构建一个虚拟的白板测试更有意义的东西。你是不可能在短短几个星期中就找到合适的非技术合伙人的,所以在此过程中你应该不停地思考这个问题。
</p>
<p>
    寻找一个非技术合伙人你不能仅仅考虑上述问题,对于他们的工作动机、个性特点等方面进行了解也是相当重要的。这些方面从他们的简历中不能有所反映,需要靠面对面的交谈才能有所了解。
</p>

</div>





Read >>


如何建立起灵活的创业团队?

<p style="color:#333333;font-family:&quot;font-size:16px;background-color:#FFFFFF;">

早期的创业公司最常犯的错误就是建立了一个外强中干的创业团队。除了好的商业计划,你能做的也就是组建好的团队了,但很多公司反其道而行之,结果导致失败。在我们探究这种情况为什么如此频繁发生以及企业家该如何应对之前,我想先分享一个我早年在风投公司工作时遇到的关于公司形成期的故事。

Read >>


isotope--优雅的分类Layout解决方案

<p>

<span style="font-size:16px;">初试isotope, 感觉很惊艳.</span> 

</p>
<p>

<span style="font-size:16px;">想起有的时候需要将一些文章或者图片按照板块进行分类, 用户点击不同分类标签, 下面的分类容器自动筛选.</span> 


Read >>


推荐三个Bootstrp插件

<p>

<span style="font-size:16px;">Bootstrap框架相信大家用的都比较多, 它极大地降低了 前端/后台/美工 一体化的程序猿的工作量.</span> 

</p>
<p>

<span style="font-size:16px;">推荐三个较实用的Bootstrap插件.</span> 

</p>
<p>

<br />

</p>
<p>

<span style="font-size:18px;"><strong>1 &nbsp;Select插件</strong></span> 

</p>
<p>





Read >>