[不指定 2005/11/20 01:15 | by turbozv ]
阿康的Canon 20D让我真是爱不释手啊~shy
点击在新窗口中浏览此图片
     
[不指定 2005/11/13 21:06 | by turbozv ]
英语啊……英语!
努力啊……努力!
[不指定 2005/11/09 07:16 | by turbozv ]
最近正好是如火如荼的Job hunting time,经常会和同学们一起讨论数据结构,算法,C语言的知识,或许我真的应该仔细记录一下这段经历。虽然自己已经拿到offer,不过可以作为其他同学面试的参考,对自己所学的知识也算是一个回顾。

<大家有什么建议和意见请在评论中指出,谢谢!>



Job Hunting -- 1.起因
C语言:
Job Hunting -- 2. sizeof运算符
Job Hunting -- 3. const与static
Job Hunting -- 4. C函数调用
算法:
Job Hunting -- 5. 排序
Job Hunting -- 6. 查找
Job Hunting -- 7. 搜索
数据结构:
Job Hunting -- 8. 线性表
Job Hunting -- 9. 字符串
Job Hunting -- 10. 堆栈和队列
Job Hunting -- 11. 树
Job Hunting -- 12. 图
其他:
Job Hunting -- 13. 经典书籍
Job Hunting -- 14. 编译器与解释器

Job Hunting 第一次讲座 幻灯片下载!
点击在新窗口中浏览此图片
[不指定 2005/11/08 09:16 | by turbozv ]
sizeof是C语言中的关键字,返回的结果是无符号整型常量size_t。

1)sizeof在编译期完成,我们应该把sizeof(xxx)看成一个size_t的常量,其中xxx的运算应完全忽略。如:
char i = 1;
int j = sizeof(i++);
int k = sizeof(i+0.1);
printf("%d %d %d", i, j, k); // 输出为 1 1 8,因为i++并不真正计算,sizeof只关心输入的数据类型,i+0.1被提升为double

同样,可以给一个函数让sizeof运算,如:
double ft(int *i) {
  (*i)++;
  return (*i) * 3.14;
}
void main()
{
  int i = 1;
  int j = sizeof(ft(&i));
  printf("%d %d", j, i); // 输出为 8 1,因为ft()并没有运算,sizeof只关心ft()的返回类型是double(8)
}

2)对数组的sizeof。n个元素数组的大小是一个元素大小的n倍,常用sizeof(arr)/sizeof(arr[0])计算一个数组的长度(而且大家尽可放心编译器直接将其优化为一个整数,而不是两个整数的除运算)


3)对结构的sizeof,有两个影响因素: 结构中的元素的最大长度M,编译器的对齐设置N。
规则一:编译器对齐属性为N(1, 2, 4, 8, 16)字节(VC中用#pragma pack(N), 或者/ZpN,默认/Zp8)
规则二:当N大于元素最大长度M时,以M为准计算
#pragma pack(1)
struct {
  char a;
  char b;
  int c;
  double d;
  char *e;
} str_a;
printf("%d", sizeof(str_a)); //  输出为18, a:1,b:1, c:4, d:8, e:4,最小单位1

#pragma pack(4)
struct {
  char a;
  char b;
  int c;
  double d;
  char *e;
} str_a;
printf("%d", sizeof(str_a)); //  输出为20, ab:4, c:4, d:8, e:4,最小单位4

#pragma pack(16)
struct {
  char a;
  char b;
  int c;
  double d;
  char *e;
} str_a;
printf("%d", sizeof(str_a)); //  输出为24, abc:8, d:8, e:8,最小单位8(因为8<16,以8为准)

    另外,经过在VS2005上的尝试,对于#pragma pack(N),N为其他异常值的情况下(3, 5, 6, 7, -1, "xxx", 1.3....),以M为准


     来给大家出一道考试题目,请写出输出结果:

int i = sizeof('a');
printf("%d", i);

     我就不给出答案了(提示:用C和CPP作为文件后缀分别试试
大家觉得没有问题的话再来几道:

int i = sizeof("a");
printf("%d", i);


int i = sizeof("a" + 1);
printf("%d", i);

... 未完 ...

<转载请注明出处>
Reference:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_pluslang_sizeof_operator.asp
分页: 61/68 第一页 上页 56 57 58 59 60 61 62 63 64 65 下页 最后页 [ 显示模式: 摘要 | 列表 ]