代码改变世界

百度面试题

2013-10-17 23:17  ripny  阅读(177)  评论(0)    收藏  举报

1.char *str1="hello";
   char str2[]="hello";
   char str3[]={'h','e','l','l','o'};
   问str1、str2、str3的区别。

答:*str1指向字符串常量,该常量存放于静态存储区;(如果有另外一个变量char *str4="hello";,则str1和str4指向同一块内存地址),并且,该内存区域不能被修改,即:*(str1+1) = 'x';这样的操作是非法的,会导致异常);

str2和str3都指向一个字符串,这个字符串存放于栈上,不同的是编译器会自动为str2添加'\0',也就是说sizeof(str2)-sizeof(str3)=1。同时,str2或str3指向的内存区域是可写的。

 

解释下面几个函数? 
int (*a())(); 
int (*b[1])(); 
int (*c())[1];

int (*a(arg))();  返回一个int(*)()型函数指针的函数(int(*)()为函数指针),这个函数参数为arg

int (*b[1])(); 一个数组,这个数组的每个元素都是一个int(*)()的函数指针