代码改变世界

C语言相关问题(1)

2011-04-28 23:25  Clingingboy  阅读(678)  评论(0编辑  收藏  举报

 

1._tcslen(".....")和stlen(".....")的区别

http://topic.csdn.net/u/20101115/22/4f15d24a-f77a-4298-91d5-9082a2b510d3.html

_t开头的函数都是如此

2.结构体对齐问题

参考:http://www.cnblogs.com/motadou/archive/2009/01/17/1558438.html
http://blog.csdn.net/jiangnanyouzi/archive/2009/01/16/3793864.aspx

比如下面结构体

struct A
{
    double d;
    int i;
    char c;
};
struct A1
{
    int i;
    double d;
    char c;
};

用sizeof测试出来是16和24

3.函数传字符串

下面三个函数均以第一个函数为准

void fun1(char *a)
{
}

void fun2(char a[5])
{
}

void fun3(char a[])
{
}

4.结构体命名规范

4.1.tag前面加前缀_,字母全大写

typedef struct _FILETIME {
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;
} FILETIME, *PFILETIME, *LPFILETIME;

4.2用tag开头,后面接大写

typedef struct tagPOINT
{
    LONG  x;
    LONG  y;
} POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;

5.指针定义的字符串

其为只读,不可改,但可以总体重复赋值,即指向了其他地方

char *a="hello";
char b[]="hello";
a[0]='1';//wrong
b[0]='1';//right
char *a="hello";
char b[]="hello";
a="world";//right
b[0]='1';//right

6.输入输出预定义变量

如下:__out和__in标识参数的输入与输出

WINUSERAPI
BOOL
WINAPI
SetRect(
    __out LPRECT lprc,
    __in int xLeft,
    __in int yTop,
    __in int xRight,
    __in int yBottom);

还有纯粹的IN和OUT定义,作为参数提示
#ifndef IN
#define IN
#endif

#ifndef OUT
#define OUT
#endif

7.指针++问题

int main()
{
    int a=1;
    int *pa=&a;

    //更改了指针地址
    pa++;
    *pa=2;
    pa++;
    *pa=3;
    pa=&a;
    //更改了指针地址
    pa++;
    int b=*pa;
    pa++;
    int c=*pa;
    //同上效果
    pa=&a;
    int b1=*++pa;//*(++pa)
    int c1=*++pa;

    pa=&a;
    //更改pa指向的值
    int b2=++*pa;//++(*pa)
    int c2=++*pa;
    //后缀++
    *pa=1;
    int b3=*pa++;//*(pa++)
    int c3=*pa++;
}

八.指针索引

可以直接指针索引值

int a=1;
int *pa=&a;
pa++;
*pa=2;
pa++;
*pa=3;
pa=&a;
int i=pa[2];