现在的位置: 首页 > 综合 > 正文

<> 部分笔记

2012年11月26日 ⁄ 综合 ⁄ 共 1602字 ⁄ 字号 评论关闭

运算符

n-->0 含义是 n-- > 0,因为C语言的每个符号应包含尽可能多的字符。比如a+++++b,含义为((a++)++) + b,但实际上符号”++”不允许a++作为左值,因此语义错误。

 

单目运算符是从右向左结合,比如*p++,含义为*(p++)

单目运算符优先于双目运算符

双目运算符:算术 > 移位 > 关系 > 逻辑 >赋值

特别地,关系运算符中 == != 优先级高于 < <= > >=,因此,有a < b == c < d这种形式。

             逻辑运算符中,&  >  ^  >  |  >  &&  >  ||

比如:if (a & b != 0)错误,if ( (a & b) != 0)正确

           r = high << 4 + low错误,r = (high << 4) + low正确

因此,正确的解决方法,还是加括号,但是,记住这些优先性还是有必要的。

 

函数指针,在库实现中得到参数结果传递给接口的方法

float *g(), (*h)();

g是一个函数,该函数的返回值为指向浮点数的指针。

h是一个函数指针,h所指向函数的返回值是浮点类型。

libpcap中的一个例子:

pcap.h中定义

typedef  void  (*pcap_handler)(u_char *,  const struct pcap_pkthdr *,  const u_char *);

int  pcap_loop(pcap_t *,  int,  pcap_handler,  u_char *);

pcap.c中定义

int  pcap_loop(pcap_t *p,  int cnt,  pcap_handler callback,  u_char *user)  { }

主文件中

调用pcap_loop(_pcap_handle,  -1,  &pcap_packet_callback,  NULL);

进行实现static  void  pcap_packet_callback(u_char * args,  const struct pcap_pkthdr *header, const  u_char * packet)  { }

将pcap_packet_callback的地址传递给 函数指针类型pcap_handler的callback。而之所以我们可以直接在pcap_packet_callback中使用header和packet的原因是:在pcap_loop实现中通过pcap *p,进行操作后得出&h(即header)和p->buffer(即packet),然后用(*callback)(user, &n, p->buffer)将这些得到的参数传递给接口。

 

 

int (*a)[31];  a为指向数组的指针。int b[12][31],b同样可认为是指向数组的指针

a = &b[11];可认为是a指向了b[11]中31个元素中的第一个元素。

 

注意 strlen( ) 只返回字符串字符数量并不包括’\0’

例子:

char *r;

r = (char *)(strlen(s) + strlen(t) + 1)

if (!r) {

         printf(“error”);

exit(1);

}

strcpy(r, s);

strcat(r, t);

 

free(r);

 

-----------------------------------------------------------------------

main(int argc, char *argv[])与main(int argc, char**argv)完全等效,只不过前面一种写法强调的重点在于argv是一个指向某数组的起始元素的指针,该数组的元素为字符指针类型。

 

返回整形的getchar()

更新文件顺序

 

假设malloc的执行过程被一个信号中断。此时,malloc函数用来跟踪可用内存的数据结构很可能只有部分被更新。如果signal处理函数再调用malloc函数,结果可能是malloc用到的数据结构完全崩溃,后果不堪设想。

 

宏,文本的变换,优缺点,编写遇到的问题

抱歉!评论已关闭.