7. int (*s[10])(int) 表示的是什么?
答案:int (*s[10])(int) 函数指针数组,每个指针指向一个int func(int param)的函数。
---------------------------------------------
8. 有以下表达式:
int a=248; b=4;
int const c=21;
const int *d=&a;
int *const e=&b;
int const *f const =&a;
请问下列表达式哪些会被编译器禁止?为什么?
*c=32;d=&b;*d=43;e=34;e=&a;f=0x321f;
答案:
*c 这是个什么东东,禁止
*d 说了是const, 禁止
e = &a 说了是const 禁止
const *f const =&a; 禁止
------------------------------------------
9. #include
#include
void getmemory(char *p)
{
p=(char *) malloc(100);
strcpy(p,"hello world");
}
int main( )
{
char *str=NULL;
getmemory(str);
printf("%s/n",str);
free(str);
return 0;
}
分析一下这段代码
答案:程序崩溃,getmemory中的malloc 不能返回动态内存, free()对str操作很危险。
getmemory中p是形参,是一个指针变量,getmemory(str)调用后,传入的是指针变量保存的对象地址,p=(char *) malloc(100)实际上是把申请的动态内存空间的首地址付给p指向的地址(即str指向的地址null),这个是错误的。应该修改成指向指针的指针void getmemory(char **p),这样malloc返回的地址付给*p(即str变量本身)。
|
|