C语言面试题2

6、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。   
7、设有以下说明和定义:  
  typedef union
{
long i;
int k[5];
 char c;
} DATE;  
 struct data
 {
   int cat;
   DATE cow;
double dog;
} too;  
 DATE max;   
则语句 printf("%d",sizeof(struct data)+sizeof(max));的执行结果是:___52____
考点:区别struct与union.(一般假定在32位机器上)  
答:DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20. data是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32. 所以结果是 20 + 32 = 52. 当然...在某些16位编辑器下, int可能是2字节,那么结果是 int2 + DATE10 + double8 = 20
  
8、队列和栈有什么区别?
      队列先进先出,栈后进先出   
9、写出下列代码的输出内容   
#include   
int inc(int a)   
 { return(++a); }   
 int multi(int*a,int*b,int*c)   
 {   return(*c=*a**b); }  
typedef int(FUNC1)(int in);   
 typedef int(FUNC2) (int*,int*,int*);  
  void show(FUNC2 fun,int arg1, int*arg2)  
  {    
  FUNC1 p=&inc;   
  int temp =p(arg1);   
  fun(&temp,&arg1, arg2);   
  printf("%dn",*arg2);   
 }   
 main()   
 {   
  int a;          //局部变量a为0;
  show(multi,10,&a);    
 return 0;
   }  
 答:110  
 
10、请找出下面代码中的所有错误 (题目不错,值得一看)  
说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”   
#include"string.h"   
main()   
{   
char*src="hello,world";   
char* dest=NULL;   
int len=strlen(src);   
dest=(char*)malloc(len);      
char* d=dest;   
char* s=src[len];           
while(len--!=0)   
d++=s--;          
printf("%s",dest);   
return 0;   
}   
答:   
方法1:一共有4个错误;   
int main()   
{   
 char* src = "hello,world";   
 int len = strlen(src);   
 char* dest = (char*)malloc(len+1);//要为分配一个空间    char* d = dest;   
 char* s = &src[len-1];          //指向最后一个字符  
 while( len-- != 0 )   
  *d++=*s--;   
 *d = 0;           //尾部要加’\0’   
 printf("%sn",dest);    
free(dest);        // 使用完,应当释放空间,以免造成内存汇泄露
dest = NULL;   //防止产生野指针 
return 0;  
 }
方法2: (方法一需要额外的存储空间,效率不高.) 不错的想法
#include
#include
main()
{
char str[]="hello,world";
int len=strlen(str);
char t;
for(int i=0; i<len 2;="" i++)<="" font="" style="word-wrap: break-word;">
{
t=str[i];
str[i]=str[len-i-1]; //小心一点
str[len-i-1]=t;
}
printf("%s",str);
return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值