c内存操作和宏条件编译

来源:互联网 发布:双色球选号过滤软件 编辑:程序博客网 时间:2024/06/13 20:03

1、内存操作函数

memset(dst,byte_value,size);    //从dst开始把size大小的内存设置为byte_value

char* ptr=malloc(100);  //向堆申请100个字节的内存大小的内存起始地址返回赋值给 ptr

memset(ptr,0,100) ;     //把从ptr开始的内存地址 到  100个字节大小的内存位置,赋值为0

2、memcpy(dst,src,size);    //

char* ptr=malloc(100);

char* ptr2 = malloc(100);

memcpy(ptr2,ptr,100);  //  把从ptr开始的100个大小的数据复制到ptr2  注意size不能超过两者的size


3、memmove(dst,src,size);   //和memcpy一样是 把从src开始的size个大小的数据复制到dst,

memcpy和memmove的区别在于,  

如果操作的是同一内存地址,或者内存相交,那么使用memmove 

如果操作的是不同的内存地址,内存不会相交 ,就使用memcpy

memmove 比memcpy安全,memcpy效率高

因为memmove是一个字节一个字节复制,memcpy是全部一起复制


宏与条件编译

宏和常量类似性质,宏比常量功能更多,

(1)、只定义一个符号

#define WIN32

(2)、定义一个固定的值,或者表达式

#define WIDTH 640

#define HEIGHT 480   ,这种用法就和常量一样

#define MAX(a,b)((a>b)?a:b)   这里就是比常量更强大的功能可以定义表达式


printf("%d, %d\n",WIDTH,MAX(3,4));

相当于printf("%d, %d\n",640,4);



条件编译:


#if  0          //如果if为真则编译if否则编译else

printf("if编译")

#else

printf("else编译")

#endif



#ifdef    WIDTH   // 如果定义了WIDTH,就执行编译

#endif



#ifnde   WIDTH   //如果没有定义WIDTH,就执行编译

#endif


,多用于配置相关环境来编译不同选项,跨平台使用








原创粉丝点击