1、malloc标准格式:
char* a;
a = (char*)malloc(50);
if(nullptr == a)
{
return;
}
memset(a,0,50);
free(a);
malloc和new的区别:
new做两件事:分配内存和调用类的构造函数,delete是:调用类的析构函数和释放内存。而malloc和free只是分配和释放内存。
2、在定义方法时,在最后一个形参后加上三点 …,就表示该形参可以接受多个参数值,多个参数值被当成数组传入。这种特性经常用于像printf
这样的函数中,该函数可以接受任意数量的参数。然而,为了处理这些额外的参数,你通常会使用<stdarg.h>
头文件中的宏,如va_start
、va_arg
和va_end
。
3、在字符串前加一个L表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。如果在字符串前加_T,则编译器会根据编译目标环境选择合适的(Unicode还是ANSI)字符处理方式 。
4、首先需要说明的是sizeof和strlen都可以求长度,但是却有很大的区别,简单来说可以概括为以下几点:
1、sizeof是一个关键字,而strlen确实一个函数。
2、sizeof求的是字节长度,而strlen求的却是实际长度。
比如int a=1;sizeof(a)==4而strlen(a)=1
3、sizeof求的是分配过来的长度,而strlen求的却是实际使用的长度。
比如:char a[30]="abcd";
sizeof(a)=30;而strlen(a)=4;
4、strlen求的长度是以'\0'结束的。
比如char a[30];strlen(a)的结果是不定的,而sizeof(a)=30;
同理:char a[30]={'a','b','c'};对于strlen来说也是不定的,而sizeof却是30。
5、sizeof是在编译是计算的,而strlen是在运行是计算的。
5、ASCII和Unicode的区别:
6、函数参数都是从左到右压入堆栈的,被_stdcall修饰的函数,其参数都是从右向左通过堆栈传递的, 函数调用在返回前要由被调用者清理堆栈,一般被用于回调。
7、正如我们可以从语法中得出的那样,整数文字有四种类型:
· 纯十进制,必须以非零数字开头。
· 八进制,任何以0开头的数字(包括纯0)。
· 二进制,需要前缀0b或0B。
· 十六进制,需要前缀0x或0X。
8、将一个整形地址强转成一个地址:int *p = (int*)0x123456。
9、如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止。如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍。
10、~是按位取反运算,与反码是不同的。反码法规定,正数原反补码相同,负数的反码为原码除符号位以外取反。
11、int a[10];这样就会开辟10*4字节的内存空间,是在你调用这个函数的时候,这个空间会存在于函数栈上。栈上的对象会在函数退出时失效。如果在.h文件,则会在new对象时开辟。
12、getenv("abc")获取环境变量abc的值。
13、负数可以通过两种形式表示:定点,例如:-1.25,符号位:1,
整数部分:111,
小数部分:0100
(4 位小数),合并这些部分得到:1 111 0100
,表示为 8 位定点数时是 11110100
。浮点,例如:-1.25,正数1.25转化为1.01,负数就是-1.01。
14、&和|表示多位数按位与或者按位或,不能用于1bit和1bit的与或操作。