有以下函数 char fun(char *p) { return p;} 该函数的返回值是( ) A、无确切的值 B、形参p中存放的地址

有以下函数 char fun(char *p) { return p;} 该函数的返回值是( ) A、无确切的值 B、形参p中存放的地址,第1张

答案为A,因为p是一个局部变量,被分配在栈区中。返回之后,fun函数出栈,fun函数之前执行时候申请的空间被系统回收,p作为一个指针占用的4个字节地址空间也被系统编辑为空闲,也就是说,这块地址如果有需要的话,随时可能会被重新分配给其他的需要的进程,如果分配给了其他进程,则p的值会被重写。所以,函数的返回值不可知。PS:返回局部变量的指针是一个很危险的不可知的 *** 作。

返回p的时候,会把p强制转化为char。由于p是一个指针,在32位机器上,指针的大小是4个字节(64位pc上是8个字节)。这个时候会把p指针值(不是指向的值,就是指针本身)的第1个字节转化为char返回。这里把完整的指针给截取了,通常是一个不知道是什么的值,没有意义。

所以,这个应该是A。

char fun(char *)是函数声明,省略了形参,可以补全的char fun(char * ch); ,在函数定义时。

(*f1)()=fun 不是错的,是函数指针。

char *s="one",a[5]={0},(*f1)()=fun,ch

相当于

char *s="one"

char a[5]={0}

char (*f1)()=fun

char ch


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7778341.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存