问题求助
一道选择题#include<stdio.h>
#include<string.h>
void fun(char *s)
{
char a;
s=a;
strcpy(a,"look");
}
int main()
{
char *p=NULL;
fun(p);
puts(p);
return (0);
}
程序运行结果为什么选不确定的值 本帖最后由 临时号 于 2022-10-4 15:14 编辑
在main函数中,你将p传入fun函数中,在fun函数中,你让s也就是main函数中的p指向a
但a并没有提前初始化,那里面有什么垃圾就给你什么垃圾,所以当然不确定啦 临时号 发表于 2022-10-4 15:08
在main函数中,你将p传入fun函数中,在fun函数中,你让s也就是main函数中的p指向a
但a并没有提前初始化,那里 ...
a不是被赋值为look了吗 本帖最后由 jackz007 于 2022-10-4 15:43 编辑
#include<stdio.h>
#include<string.h>
void fun(char * s)
{
char a ;
s = a ;
strcpy(a , "look") ;
}
int main(void)
{
char * p = NULL ;
fun(p) ;// p = NULL,虽然作为参数被传入 fun(),但在 fun() 中被修改的只是 p 的副本
puts(p) ;// fun(p) 并不能改变 p ,所以,p 仍然是 NULL,执行此句程序会直接奔溃。
}
楼主可以实际编译、运行一下这个程序
下面的代码才可以实现楼主所说的效果
#include<stdio.h>
#include<string.h>
void fun(char ** s)
{
static char a ; // a[] 必须定义为静态变量,否则,在函数 fun() 调用结束后,其所占内存会被即刻释放,无法看到效果。
* s = a ;
strcpy(a , "look") ;
}
int main(void)
{
char * p = NULL ;
fun(& p) ; // 传入 fun() 的是指向 p 的指针,这样,fun() 对 p 的修改才可以得到保留
puts(p) ;
}
h-b-z-d-j-s-m 发表于 2022-10-4 15:24
a不是被赋值为look了吗
先执行s=a,然后再赋值为look
页:
[1]