随笔分类 -  Language C

摘要:p..<关于数组和指针>: 1.先看一个程序,你认为如果编译它,哪里会有错误? 1 #include <stdio.h> 2 #include <conio.h> 3 char a[2][2] = {{1,1},{2,2}}; 4 void fuc_1(char **a) 5 { 6 printf("%d",a[0][1]); 7 } 8 void fuc_2(char (*a)[]) 9 { 10 printf("%d",a[0][1]);//invalid use of array with unspecified 阅读全文
posted @ 2011-03-06 17:14 Finux_you 阅读(512) 评论(0) 推荐(0)
摘要:p22-27<ANSI C的Bug>: 你认为下面程序会打印出什么?为什么?1#include<stdio.h>2#include<conio.h>3inta[]={1,3,4,5,6,7,8};4/*(sizeof(a[0]))而不是sizeof(int)*/5#defineMAX_ELEMENT((sizeof(a))/(sizeof(a[0])))6intmain(void)7{8intd=-1;9if(d<=MAX_ELEMENT-2)10{11printf("Thereisnobug.\n");12}13else14{15 阅读全文
posted @ 2011-02-24 17:23 Finux_you 阅读(277) 评论(0) 推荐(0)
摘要:p132<二分查找法的边界问题>: 编写一个函数,查找有序整形数组中的元素。返回值:指向找到元素的指针,如果没有,返回NULL。参数:指向整型数组的指针、数组元素的个数、要查找的元素。见代码:#include <stdio.h>/*不对称边界*/ int *bsearch_0(int *t, int n, int x){ int lo = 0; int hi = n;/*上界是第一个出界点*/ int mid = 0; while(lo < hi) { //mid = (lo + hi)/2; mid = (lo + hi) >> 1; if(x &l 阅读全文
posted @ 2011-02-23 12:02 Finux_you 阅读(150) 评论(0) 推荐(0)
摘要:p52-56<缓冲区的另一个例子>: 需求:程序生成一些可能包括若干页的整数,每页包括NCOLS列,每列包括NROWS个元素。程序生成时按列分布,打印时按行打印。 分析:需要两个函数: print:生成的整数传给print,它仅在缓冲区满时才打印,未满时将数字送入缓冲区。其中打印任务由三个函数完成:printnum在本页当前位置打印一个数值;printnl则打印一个换行符;printpage打印一个分页符。 flush:最后一个数值生成后,不管缓冲区是否已满,调用flush打印缓冲区中所有元素。 某种形式的缓冲区必不可少。因为只有知道某行的最后一个元素时,才能打印这一行的元素。对于 阅读全文
posted @ 2011-02-21 11:37 Finux_you 阅读(299) 评论(0) 推荐(0)
摘要:p7,<优先级问题>: 以下循环语句的本意是跳过文件中的空格符、制表符和换行号: while(c = ' ' || c == '\t' || c == '\n') c = getc(f); 由于把==误写为=,实际上此语句将以下表达式的值付给了c: '' || c == '\t' || c == '\n' 因为赋值运算符=的优先级要低于逻辑运算符||。p8,<词法分析的贪心法>: 编译器将程序分解为符号的方法是:从左到右一个字符一个字符地读入,如果该字符能够组成一个符号,那么 阅读全文
posted @ 2011-02-17 11:03 Finux_you 阅读(346) 评论(0) 推荐(0)