> 文章列表 > C中的一点小东西

C中的一点小东西

C中的一点小东西

1.内存

代码区:编译后的程序指令,CPU可直接执行的机器码。字符串常量、字符常量、浮点数常量、枚举常量等。
数据区:全局变量、静态变量。
堆:动态申请的区域。
栈:函数参数、临时变量。

2.malloc free

int *p = NULL;

p = (int*) malloc(sizeof(int));//申请成功不为NULL,申请不成功为NULL。

free§;

3.extern

extern只起申明作用,不定义,extern的变量或函数的定义在其他文件中。extern的函数或变量在头文件中被引用了,只会被编译一次。
.h中extern的变量或函数定义可以不在对应的.c文件中,但该对应的.c文件中也可以使用。
.h中声明的变量或函数定义需要在对应的.c文件中。

4.空类型指针

空类型指针可以转为其他类型的指针,其他类型的指针也可转为空类型的指针
int num = 10;
int *p = #
void *q = p;

int num = 10;
void *p = #
int *q = (int *) p;

5.一些整型

int8_t(8位有符号整型),
int16_t(16位有符号整型),
int32_t(32位有符号整型),
int64_t(64位有符号整型)
精度和范围不同,在不超出范围的情况下同一个数值在数值上是大小是相等的。

6.函数指针和指针函数

函数指针:void (*fun)(parm);//可作为函数参数实现回调功能
指针函数:void * fun(parm);//返回一个指针

回调:
s端:
typedef void *fo(parm) ;
fo s_listener = NULL;
void callback(fo listener) {
s_listener = listener;
}
s_listener(parm);
c端:
void fo(parm) {…}
callback(fo);

7.拼接字符串

int num = 75253;
char str[64] = {0};
sprintf(str, “this num is *%d”, num);//this num is 75253;

for(int i=0; i<10; i++) {
sprintf(str + i, “%d”, i);
}//str:0123456789

snprintf(str, 4, “%d”, num);//752(占位符‘\\0’);

8.define函数

level_error = 4;
#define LOG_ERROR(msg) log(level_error,msg)
void log(int levle, char* str) {
printf(str);
}