C语言深度解剖 (一)

2016-11-30 10:11:57来源:作者:镜缘浮影人点击

前言

C语言的水深不见底,好在一些前辈们已经将很多雷区探了一遍

这里分享一下我在学习 《C语言深度解剖》过程中的一些笔记和心得

概要 sizeof

sizeof是关键字,而不是函数

main(){int i=0;int a=sizeof(int); // 4 ,因为int类型占4个字节int b=sizeof(i); // 4 ,因为i为int类型,占4个字节int c=sizeof i; //4 这个写法也是可以的与上面的相同//int d=sizeof int; //error C2059: syntax error : 'type'}

Tip:在VC++6.0中,我们可以使用 F10开启debug的观察模式, F11可以逐条执行代码,借此可以观察变量值在整个过程中的变化情况,而不必使用打印语句,并且这样观察的结果更切近实际情况, F9可以安插断点,让程度一口气执行到断点的地方停住

#include <stdio.h>int b[100];void fun(int b[100]){int x=sizeof(b); //4,b此时只是一个指针,指针在32位平台中为4个字节}void main(){int *p=NULL,a[100];int x=sizeof(p); //4,指针在32位平台中为4个字节int y=sizeof(*p); //4,int型指针所指内容为int型整数,int型整数为4字节int z=sizeof(a); //400,a为int型数组的首地址,100个元素,共400字节int u=sizeof(a[100]); //4,第100个元素还是整型,占4字节,虽然这个元素因为越界并不存在int v=sizeof(&a); //400,a为int型数组的首地址,100个元素,共400字节int w=sizeof(&a[0]); //4,第0个元素还是整型,占4字节int r=sizeof(b); //400,b为int型数组的首地址,100个元素,共400字节fun(a);} signed/unsigned #include <stdio.h>#include <string.h>int main(){char a[1000];int i,b;for (i=0;i<1000;i++){a[i]=-1-i;}b=strlen(a); //255,因为遇到了'/0' , '/0' 的二进制码为 00000000 , 就成为了字符串的终结return 0;}

32位平台里:

signed int 型范围为 -2^31 ~ 2^31-1

char类型表示范围为 -2^7 ~ 2^7-1

unsigned int 型范围为 0~ 2^32-1

char类型表示范围为 0 ~ 2^8-1

编译器缺省情况下数据为signed类型

#include <stdio.h>#include <string.h>int main(){unsigned i;for(i=9;i>=0;i--){printf("%u/n",i);}}

这段代码会陷入死循环,因为i永远不可能小于零

void #include <stdio.h>#include <string.h>int main(){float *p1;int *p2;void *p3;//p1=p2; //warning C4133: '=' : incompatible types - from 'int *' to 'float *'p1=(float*)p2; //经过转化是可以的p2=(int*)p1; //经过转化是可以的//p2=p1; //warning C4133: '=' : incompatible types - from 'float *' to 'int *'p3=p1; //空指针可以接受其它类型指针值p3=p2; //空指针可以接受其它类型指针值}

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台