随记-------不定期添加遗忘知识点

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
", &a, p);		//0012FF7C 0012FF7C
	printf("a: %d , *p %d
",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;
}

  

原文地址:https://www.cnblogs.com/chagmf/p/3768427.html