C专家编程 Expert C Programming

发布于 2019-09-26 作者 风铃 66次 浏览 版块 前端

    <h1 class=\"postTitle\">
        <a id=\"cb_post_title_url\" class=\"postTitle2\" href=\"http://www.cnblogs.com/purejade/p/3908642.html\">C专家编程 Expert C Programming</a>
    </h1>
    <div class=\"clear\"></div>
    <div class=\"postBody\">
        <div id=\"cnblogs_post_body\"><p>该书中一些思想还是比较有用的,但随着编译器以及规范的变化,书中有些内容已经发生了变化,以下是实践之后的一些总结。</p>

1 - typedef int x[10] 和 define x int[10]  区别

define 定义为变量替换,而typedef为声明替换;

#define peach int;

unsigned peach i;  //wrong

typedef int banana;

unsigned banana i; //wrong

声明替换用typedef

识别数组和函数指针

e.g:
int const * zero;                              //zero是一个指针,指向一个常量整形
char (*zero)[20];                           //zero是一个指针,指向一个有20个char元素的数组
typedef void (*ptr_to_func)(int);     //ptr_to_func是新类型名,这种类型是一个函数指针,指向接收一个int参数,并返回void的函数
char* const * (*zero)();               //zero是一个函数指针,该函数无参数,并返回一个指针,返回的指针指向一个常量指针
char* (*zero[10])(int **p);          //zero是一个数组,元素是函数指针,其指向的函数授受一个二维指针,并返回一个指向char的指针
void (*signal(int sig, void (*func)(int)))(int);     //signal是一个函数,该函数接收一个int,一个函数指针,并返回一个函数指针
 
2- signal , longjmp , setjmp 

#include <signal.h>
#include <stdio.h>
#include <setjmp.h>
jmp_buf buf;
void handler(int s) {
if(s==SIGSEGV) printf("now got a segmentation violation signal\\n");
longjmp(buf,1);
}
int main() {
int *p = NULL;
signal(SIGSEGV,handler);
if(setjmp(buf)){
printf("back in main\\n");
return 0;
} else {
printf("nothing\\n");
}
*p = 0;
loop:
goto loop;
return 0;
}

3 . 数组和指针

数组a[10],则a和a [0]的地址等价;

#include <stdio.h>
int b[]={1,2};
int main() {

int a[10];
int *p = a;

printf("p %x \\n",&p);
printf("&a %x\\n",&a);
printf("&a[0] %x\\n",&a[0]);

printf("&b %x\\n",&b);
printf("&b[0] %x\\n",&b[0]);
printf("%d\\n",*b);

printf("%d\\n",sizeof(a));
return 0;
}

结果:

p bfc4ca7c
&a bfc4ca54
&a[0] bfc4ca54
&b 804a014
&b[0] 804a014
1

40

4. 如果确定一个变量是有符号数还是无符号数?

#define ISUNSIGNED(a) (a>=0 && ~a > 0)

5.从文件中随机提取一个字符串

依次读取文件,然后与保存的字符串进行选择,则假设取到第N个,则以保存N-1个,则当前概率和为1/N,而保存的每个概率也为1/N。

6. 有趣的问题:如何用气压计量器测量建筑物的高度? 

要学会聚焦,问题是测量建筑物高度,然后用到气压计量器就可以了。。。  方法很多了

 


 









    </div>
    <div class=\"postDesc\">posted @ <span id=\"post-date\">2014-08-12 22:53</span> <a href=\"http://www.cnblogs.com/purejade/\">purejade</a> 阅读(<span id=\"post_view_count\">...</span>) 评论(<span id=\"post_comment_count\">...</span>)  <a href=\"http://i.cnblogs.com/EditPosts.aspx?postid=3908642\" rel=\"nofollow\">编辑</a> <a href=\"#\" onclick=\"AddToWz(3908642);return false;\">收藏</a></div>
收藏
暂无回复