1. 复合字面值
char *get_status_str(int status)
{
return (char *[]){"linkdown","partial-linkup","full-linkup","N/A"}[status];
}
2. 常量折叠
#include <stdio.h>
int main() {
const int a=9;
int *p=(int*)&a;
*p=10;
printf("%p %p\n", &a, p); //0012FF7C 0012FF7C
printf("a: %d , *p %d\n",a,*p); //a: 9 ,*p: 10
return 0;
}
具体参考:http://blog.csdn.net/yafeng_jiang/article/details/7101964
3. 系统里一些变量借来使用.
4. send recv并不是真正的发送接收,只是与socket缓冲区交互
5. 大小端转换
#define CHANGE_ENDIAN_DW(data) (data<<24 | data>>24 | data>>8&0xff00 | data<<8&0xff0000)
6. 参数传递二维数组
当二维数组作为函数参数传递给函数时,函数形参可以是(int *p[], 或者int **p),但在函数体里面会把二维数组作 为一维处理,这时候先强制转换一位数组,按照步进处理。
如二维数组转置:
void matrix_transpose(int *src[], int *dst[], int x, int y)
{
int i, j;
int *psrc, *pdst;
i = j = 0;
psrc = (int *)src;
pdst = (int *)dst;
for(i = 0; i < x; i++)
{
for(j = 0; j < y; j++)
{
*(pdst + j*x + i) = *(psrc + i*y + j);
}
}
}
7.看到CU问答上的一个关于locatime的问题:http://ask.chinaunix.net/question/785566
发现:系统提供的函数:getpwuid ()和 getgrgid() 调用时存在内存泄漏。而localtime并未出现内存泄漏。
问题1:getpwuid 、 getgrgid等函数内存泄漏的合理内因是什么?
问题2:假设getpwuid 、 getgrgid等函数内存泄漏有其合理性的意义,localtime函数的返回值与前两个函数的返回值 类似,请问它是如何做到不泄露的?
答复: 大数据处理函数存在一个数据结果谁调用谁释放的问题,而localtime不算是这类的。
答复2: localtime返回的是static变量,是不可重入的,可以使用localtime_r()代替.
8. 柔性数组 flexible array
http://coolshell.cn/articles/11377.html
访问成员数组名其实得到的是数组的相对地址,而访问成员指针其实是相对地址里的内容
#include <stdlib.h>
#include <string.h>
struct line {
int length;
char contents[0]; // C99的玩法是:char contents[]; 没有指定数组长度
};
int main(){
int this_length=10;
struct line *thisline = (struct line *)
malloc (sizeof (struct line) + this_length);
thisline->length = this_length;
memset(thisline->contents, 'a', this_length);
return 0;
}
posted on
浙公网安备 33010602011771号