几道C的基础题解答不一定对有错忘纠正!

来源:互联网 发布:家庭用网络电话机 编辑:程序博客网 时间:2024/06/05 07:50

1。CHAR A='72',A包含几个字符
2。什么是堆,什么是栈?CHAR S【4】;S是否分配内存,分配在堆还是栈,怎么释放S
3。X/0会有什么问题,CPU会报错不,如果会报错,报什么错,如果不报错,为什么
4。INT在32位机上占几个字节,unsigned int的取值范围是多少
5。char s[5],strcpy9(s,"cat")执行后,strlen(s)是多少,sizeof(s)是多少

 

 

 

 

 

初看之下觉得好简单。但是真的像初看时那么简单吗?再想想。。。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.char a = '72'; 

此题可不要看成什么a = 72.完全不是这么回事.那这个赋值做了什么事。

首先'72'会被解释成37 字符'7 '和 32 字符'2'ascii码值16进制然后赋值给a,而由于a只有一个字节(如果char是一个字节的话)因此最后值是32也就是字符'2';

如果是int a; 则此时的值是14130也就是16进制的0x3732

 

2.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

  堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由操作系统回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。

  全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 

 

因此这个题目的解答就要分情况:1.如果是在是在函数内声明的话,那变量被分配在栈区,程序会自动回收

                                             2.如果是用malloc函数动态声明申请的,那变量的空间被分配到了堆区,因此需要程序员手动释放否则会发                                                 生内存泄露,也可以在程序结束的时候有系统自动回收。

                                             3.如果该书是全局变量或者静态变量。则被分配到静态区。

 

3.X / 0 也就是任意的一个数除以0会是什么结果,相信应该都可以知道会抛出一个除以0的异常。但是这并不是这个题目的完整解答。其实如果X是一个浮点数的话。那么结果将是一个无穷大的数。因为浮点数0因为精度的问题并不是一个严格意义上的0,只是一个无限接近0的数,因此一个数除以一个无限接近于0的数那必然是无穷大。

 

4.int在32位机的取值,或许大部分人会说4个字节。但是答案是不一定的。int型的数据根据编译器的不同大小也不同,其在C标准中只规定了int < long型因此,回答应该根据编译器而定.

 

5.正常算的话这道题目的答案显而易见是3和5。但是答案光是这样估计还不够。注意看最后的那个sizeof(s)在以变量形式进行计算时,此时这是一个数组常量指针,在这种情况下结算结果就是数组的大小,但是如果此时s作为函数的参数传递时,那么这个指针就直接退化为,正常的指针,而用sizeof来计算大小结果为4,也就是一个指针的大小。另外 sizeof()并不是一个函数。。。

 

真的是基础啊!!汗

原创粉丝点击