Chinaunix首页 | 论坛 | 博客
  • 博客访问: 458508
  • 博文数量: 40
  • 博客积分: 1410
  • 博客等级: 军士长
  • 技术积分: 1396
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-22 19:26
个人简介

嵌入式系统工程师,从事视频、图像、网络、虚拟化等方面的底层软件开发与优化。

文章存档

2014年(4)

2013年(10)

2012年(14)

2011年(12)

分类: LINUX

2011-12-19 16:28:53

第一部分 《C语言深度剖析》

1. sizeof 是关键词不是函数,可以这么写:sizeof(int)/sizeof(i)/sizeof i,但不能这么写sizeof int!“size(int) * p”表示什么意思呢?sizeof(int) = 4,所以是“4*p”!
留个问题:以下代码运行,先后打印什么呢?
  1. #include <stdio.h>

  2. void fun(int a[100])
  3. {
  4.     printf("\n\nIn the fun function!\n\n");

  5.     printf("sizeof(a) = %d.\n", sizeof(a));            //care about this one
  6.     printf("sizeof(a[100]) = %d.\n", sizeof(a[100]));
  7.     printf("sizeof(&a) = %d.\n", sizeof(&a));
  8.     printf("sizeof(&a[100]) = %d.\n", sizeof(&a[100]));
  9. }

  10. int main(int argc, char *argv[])
  11. {
  12.     char *p = NULL;
  13.     int a[100];

  14.     printf("sizeof p = %d.\n", sizeof p);
  15.     printf("sizeof *p = %d.\n", sizeof *p);

  16.     printf("sizeof(a) = %d.\n", sizeof(a));            //care about this one
  17.     printf("sizeof(a[100]) = %d.\n", sizeof(a[100]));
  18.     printf("sizeof(&a) = %d.\n", sizeof(&a));
  19.     printf("sizeof(&a[100]) = %d.\n", sizeof(&a[100]));

  20.     fun(a);
  21.     
  22.     return 0;
  23. }
第一句:当sizeof操作的是一个结构体或者变量时,返回值为它的实际大小,这个实际大小可能包括为了字节对齐插入的多余字节。如main函数里第三个打印出"sizeof(a) = 400.";
第二句:如果操作的是一个静态大小的数组,返回整个数组的大小;
第三句:如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。如fun()函数中打印出"sizeof(a) = 4.";
第四句:sizeof操作符不能返回动态开辟的数组或形参数组的大小。

2. 定义与声明的区别:创建了对象并为对象分配了内存是定义;只创建了对象未分配内存是声明。

3. for循环的初始化声明只在C99下允许。即for(int k = 0; k < 10; k++)这样的写法,只在C99模式下被允许。

4. strlen()函数。如下源码,输出是多少呢?
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(int argc, char *argv[])
  4. {
  5.     char a[1000];
  6.     int i;

  7.     for(i = 0; i < 1000; i++)
  8.         a[i] = -i - 1;

  9.     printf("sizeof(a) = %d.\n", strlen(a));

  10.     return 0;
  11. }
注:strlen()函数用于计算字符串长度,判断字符串是否结束的标志是是否遇到‘\0',如果遇到,则认为本字符串结束。分析到此,应该猜到打印出的结果是“sizeof(a) = 255.”了。

5. void:void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量。
void真正发挥的作用在于: 
  (1)对函数返回的限定; 
  (2)对函数参数的限定。 
void关键字的使用规则: 
  规则一 如果函数没有返回值,那么应声明为void类型 
     在C语言中,凡不加返回值类型限定的函数,就会被编译器作为返回整型值处理。但是许多程序员却误以为其为void类型。
      规则二 如果函数无参数,那么应声明其参数为void 
      规则三 小心使用void指针类型 
      规则四 如果函数的参数可以是任意类型指针,那么应声明其参数为void * 
      规则五 void不能代表一个真实的变量
阅读(2792) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~