面试题1
数组和链表的区别是什么?
解析:数组和链表的区别体现在以下方面。
数组:数据顺序存储,固定大小。
链表:数据可以随机存储,大小可动态改变。
面试题2
运行如下的C 代码,输出是什么?
- char* GetString1()
- {
- char p[] = "Hello World";
- return p;
- }
- char* GetString2()
- {
- char *p = "Hello World";
- return p;
- }
- int main(int argc, char * argv[])
- {
- printf("GetString1 returns: %s. \n", GetString1());
- printf("GetString2 returns: %s. \n", GetString2());
- return 0;
- }
解析:输出两行,第一行GetString1 returns: 后面跟的是一串随机的内容,第二行GetString2 returns: Hello World。两个函数的区别在于GetString1 中是一个数组,而GetString2中是一个指针。
当运行到GetString1 时,p 是一个数组,会开辟一块内存,并复制“Hello World”初始化该数组,接着返回数组的首地址并退出该函数。由于p 是GetString1 内的一个局部变量,当运行到这个函数外面的时候,这个数组的内存会被释放掉。因此,在main()函数里再去访问这个数组的内容时,结果是随机的。
当运行到GetString2 时,p 是一个指针,它指向的是字符串常量区的一个常量字符串,该常量字符串是一个全局的,并不会因为退出函数GetString2 而被释放掉。因此,在main()中仍然根据GetString2 返回的地址得到字符串“Hello World”。



