大华C/C++面试题目解析

来源:互联网 发布:软件项目ppt 编辑:程序博客网 时间:2024/04/29 23:31

1..写一个“标准宏”,输入两个参数并返回最小的那个。

   解析:这个题目很简单:#define MIN(a,b)  (b<a?b:a)     这里容易犯的错误是遗漏掉了括号,这样预编译的时候,没编入括号,会导致一些很难发现的问题。



2. .h头文件中#ifndef/#define/#endif的作用___

   解析:这个很简单,为了防止头文件重复包含编译,,vc里面的#pragma once也有相同作用,不过要编写跨平台程序,还是用前者比较好


3.请写出下面代码在32位平台上的结果

    #include<stdio.h>

    #include<stdlib.h>


 int main(void)

{

   char a[30];

   char *b=(char *)malloc(20*sizeof(char));

   printf("%d\n",sizeof(a));

   printf("%d\n",sizeof(b));

   printf("%d\n",sizeof(a[3]));

   printf("%d\n",sizeof(b+3));

   printf("%d\n",sizeof(*(b+4)));

 return 0;

}


运行结果为————

解析:1. 在32位平台上,char占1字节,short占2字节,int型占4个字节,long型占4个字节,指针占4个字节

             在64位平台上,char占1字节,short占2字节,int型占4个字节,long型占8个字节,指针占8个字节,

             2. 数组与指针是两个不同的概念,数组要么在静态存储区域被创建,要么在栈上被创建,数组名对应着(而不是指向)

一片内存,其地址与容量在整个生存周期内都不改变,但内容改变。我们经常使用指针来操作动态内存。指针远比数组灵活但也危险。

 在计算容量的时候,sizeof(a)是指计算数组名为a的数组所占的内存,如果char *p=a,再sizeof(p),这个时候计算的就是p这个指针所

对应的字节数了,c/C++无法知道指针的数量,除非在动态分配内存的时候记住它。

          同时要注意:当数组a作为参数传递的时候,自动退化为同类型指针,  如果这个时候在函数体里面计算此指针的字节数,

仍然会得到指针所占的内存字节数。

    

        而当一个数组名进行+,-操作的时候,结果应该也会退化为指针。

        

       剩下的三个应该很好判断。

 

 还查到vs2010默认是编译的WIN32程序,所以,类型所分配的内存大小应该是按1来的。



4,

0 0
原创粉丝点击