C语言温习总结之一《C语言深度剖析》部分(目前看到75页)

来源:互联网 发布:reduce python 编辑:程序博客网 时间:2024/05/06 04:56
第一部分 《C语言深度剖析》

原文: C语言深度解剖.pdf   
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不能代表一个真实的变量
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(278) | 评论(0) | 转发(0) |
0

上一篇:TCP/IP报头

下一篇:Asterisk的基本配置

相关热门文章
  • linux 常见服务端口
  • xmanager 2.0 for linux配置
  • 【ROOTFS搭建】busybox的httpd...
  • openwrt中luci学习笔记
  • 什么是shell
  • linux dhcp peizhi roc
  • 关于Unix文件的软链接
  • 求教这个命令什么意思,我是新...
  • sed -e "/grep/d" 是什么意思...
  • 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
原创粉丝点击