0 Comments

面试题:数组(2)

发布于:2012-11-30  |   作者:广州网站建设  |   已聚集:人围观
数组(2)

面试题1

数组和链表的区别是什么?

解析:数组和链表的区别体现在以下方面。

数组:数据顺序存储,固定大小。

链表:数据可以随机存储,大小可动态改变。

面试题2

运行如下的C 代码,输出是什么?


  1. char* GetString1()  
  2. {  
  3. char p[] = "Hello World";  
  4. return p;  
  5. }  
  6. char* GetString2()  
  7. {  
  8. char *p = "Hello World";  
  9. return p;  
  10. }  
  11. int main(int argc, char * argv[])  
  12. {  
  13. printf("GetString1 returns: %s. \n", GetString1());  
  14. printf("GetString2 returns: %s. \n", GetString2());  
  15. return 0;  

解析:输出两行,第一行GetString1 returns: 后面跟的是一串随机的内容,第二行GetString2 returns: Hello World。两个函数的区别在于GetString1 中是一个数组,而GetString2中是一个指针。

当运行到GetString1 时,p 是一个数组,会开辟一块内存,并复制“Hello World”初始化该数组,接着返回数组的首地址并退出该函数。由于p 是GetString1 内的一个局部变量,当运行到这个函数外面的时候,这个数组的内存会被释放掉。因此,在main()函数里再去访问这个数组的内容时,结果是随机的。

当运行到GetString2 时,p 是一个指针,它指向的是字符串常量区的一个常量字符串,该常量字符串是一个全局的,并不会因为退出函数GetString2 而被释放掉。因此,在main()中仍然根据GetString2 返回的地址得到字符串“Hello World”。

 

 
标签:
飞机