h-b-z-d-j-s-m 发表于 2022-10-4 14:57:59

问题求助

一道选择题
#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:08:07

本帖最后由 临时号 于 2022-10-4 15:14 编辑

在main函数中,你将p传入fun函数中,在fun函数中,你让s也就是main函数中的p指向a
但a并没有提前初始化,那里面有什么垃圾就给你什么垃圾,所以当然不确定啦

h-b-z-d-j-s-m 发表于 2022-10-4 15:24:06

临时号 发表于 2022-10-4 15:08
在main函数中,你将p传入fun函数中,在fun函数中,你让s也就是main函数中的p指向a
但a并没有提前初始化,那里 ...

a不是被赋值为look了吗

jackz007 发表于 2022-10-4 15:29:24

本帖最后由 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)             ;
}

临时号 发表于 2022-10-4 15:34:13

h-b-z-d-j-s-m 发表于 2022-10-4 15:24
a不是被赋值为look了吗

先执行s=a,然后再赋值为look
页: [1]
查看完整版本: 问题求助