C语言编程问题,下面的程序输出结果是string,还是无法确定?高手大哥帮忙解释一下,谢谢啦!
程序:#include<stdio.h>#include<string.h>voidfun(char*s){chara[10];strcpy(a,"STRING");s=...
程序:
#include<stdio.h>
#include<string.h>
void fun( char *s)
{ char a[10];
strcpy( a,"STRING");
s=a;
}
main()
{ char *p;
fun(p);
printf("%s\n",p);
}
的输出结果是: 展开
#include<stdio.h>
#include<string.h>
void fun( char *s)
{ char a[10];
strcpy( a,"STRING");
s=a;
}
main()
{ char *p;
fun(p);
printf("%s\n",p);
}
的输出结果是: 展开
2个回答
2014-08-26
展开全部
为了验证你的程序,我特意在Linux下运行了,结果和Windows上不同,可以说结果是不定的。
你把要注意,p你是作为形参传值进入fun()的,fun从根本上不可能改变p的值。事实也是如此。
换一句话说在运行函数的时候,p被复制给了临时变量s,你的那个s和p根本是两个指针,运行了之后,s指向了你的那个数组a,p没有变。
那么你能改变的是什么呢?
将main中“char *p” 改为 “ char p[]="helloworld" ”,再运行,你就明白了。
给函数传递指针,你可以改变指针所指区域的值,但是你不能改变指针本身的值。
所以你的程序在Linux上运行出现错误。什么也没输出来。
你把要注意,p你是作为形参传值进入fun()的,fun从根本上不可能改变p的值。事实也是如此。
换一句话说在运行函数的时候,p被复制给了临时变量s,你的那个s和p根本是两个指针,运行了之后,s指向了你的那个数组a,p没有变。
那么你能改变的是什么呢?
将main中“char *p” 改为 “ char p[]="helloworld" ”,再运行,你就明白了。
给函数传递指针,你可以改变指针所指区域的值,但是你不能改变指针本身的值。
所以你的程序在Linux上运行出现错误。什么也没输出来。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询