C语言中实参与形参之间的值传递问题,以下面这个题目解答一下。。。拜托

2025-04-03 13:05:58
推荐回答(3个)
回答1:

//这道题是对于升序的字符序列,转换为逆序
//这里参数传递的是字符数组的头指针
//通过该指针可以修改main函数中数组p指向的内存
//换句话说,fun中的w和main函数的中的p不是同一个变量(值传递),但这两个指针指向的内存空间一样(值传递,copy了指针的指向)
//所以在fun函数内修改,会改变main函数中p指向的内容
#include 
#include 
void fun(char *w, int n)
{   char t,*s1, *s2;
    s1=w; s2=w+n-1;
    while(s1}
void main()
{   char *p;
    p=“1234567”;
    fun(p,strlen(p));
puts(p);
}

回答2:

你的这段代码有问题,问题在于主程序中
char *p;
p="1234567"; //此时指针p指向的是一个常量字符串,里面的内容是无法修改的,而你的子程序是进行字符串逆序,必须修改字符串中的内容,所以会出现异常。
修改的方法是把p定义为一个字符数组:
char p[]="1234567";
其他代码不动。

回答3:

void fun(char *w, int n) 这里的 *w n 是形式参数,
fun(p,strlen(p));这里传递给函数 fun 的 p,strlen(p) 是实参,
strlen(p):字符串 p 的长度。