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


    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;
    }
    

      

  • 相关阅读:
    myeclipse项目转到eclipse中
    线程防止冲突
    Flex FLOWBOX 添加RichText 不换行
    win7 修复系统文件
    一月学习socket tcp通信总结
    flex
    [调试技巧] 如何利用WinDbg找出程序崩溃的位置
    Class Struct 转Byte Serialize Marshal 区别
    C#捕获摄像头进行拍照和录像资料总结
    WebBrowser控件使用技巧分享
  • 原文地址:https://www.cnblogs.com/chagmf/p/3768427.html
Copyright © 2020-2023  润新知